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