当前位置: 首页 > 工具软件 > MXML > 使用案例 >

MXML保存时格式化XML详细

江华容
2023-12-01

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

}

 类似资料: