天天看點

MXML儲存時格式化XML詳細

參考:https://blog.csdn.net/whymewuxian/article/details/16866489?utm_source=blogxgwz7

           https://blog.csdn.net/zerolity/article/details/70892705?utm_source=blogxgwz6

關于格式化XML檔案,主要通過四個參數MXML_WS_BEFORE_OPEN、MXML_WS_BEFORE_CLOSE、MXML_WS_AFTER_OPEN和MXML_WS_AFTER_CLOSE進行控制。

以實際例子進行說明

<?xml version="1.0" encoding="UTF-8"?>

<action>

        <tmp>sample</tmp>

        <str>strstr</str>

</action>

在儲存到檔案時,使用mxmlSaveFile函數,函數的第三個參數是一個回調函數,定義為

const char *whitespace_cb(mxml_node_t *node, int where)

其中where的取為MXML_WS_BEFORE_OPEN、MXML_WS_BEFORE_CLOSE、MXML_WS_AFTER_OPEN和MXML_WS_AFTER_CLOSE。

這四個參數分别代表一行XML的四個位置,以<tmp>sample</tmp>進行說明:

MXML_WS_BEFORE_OPEN代表<tmp>的前面,可以是'\t”或“\n"

MXML_WS_BEFORE_CLOSE代表<tmp>的後面,可以是"\n"

MXML_WS_AFTER_OPEN代表</tmp>的前面,可以是”\n"

MXML_WS_AFTER_CLOSE代表</tmp>的後面,可以是"\n"

在mxmlSaveFile函數儲存檔案時,每個名稱會調用四次,分别傳如上面的四個參數。以上面的例子為例進行格式化,代碼如下:

const char *whitespace_cb(mxml_node_t *node, int where)

{

        const char *name;

        name=mxmlGetElement(node);

      if(strcmp(name, "action") == 0x0)

      {

               if((where == MXML_WS_BEFORE_OPEN) || (where == MXML_WS_AFTER_OPEN))

              {

                    return ("\n");

               }

       }

       else

        if(strcmp(name, "?xml version=\"1.0\" encoding=\"UTF-8\"?"))

        {

            if(where == MXML_WS_BEFORE_OPEN)

            {

                return ("\t");

            }

            if((where == MXML_WS_AFTER_CLOSE))

            {

                return ("\n");

            }

        }

}