參考: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");
}
}
}