首页 > 代码库 > libxml两种换行方法

libxml两种换行方法

好久没上来留下一些记录了,可能是太忙,又或者是过于慵懒便疏于整理。

libxml是一个开源的库,linux下解析xml文件经常用到,进行一些创读增删的操作。

最开始接触的时候,看到了一个简明易懂的《Libxml 简单教程》,看完之后直接就可以实现大多数常用的xml管理工作。

但是在功能实现之后,发现保存后的文档不大美观,创建的所有节点会挤到同一行,不便于阅读。

 

在这里,我所知道的暂时有两种方法来处理这个换行问题。 

原始xml如下:  

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <root> 3   <newNode1>newNode1 content</newNode1> 4   <newNode2>newNode2 content</newNode2> 5   <newNode3>newNode3 content</newNode3> 6   <node2 attribute="yes"></node2> 7   <son> 8     <grandson>grandson content</grandson> 9     <grandson2>This is a grandson2 node</grandson2>10     <node2 attribute="no"></node2>11     <node3 attribute="1123">12       <node1>13         <node2 attribute="nothing"></node2>14       </node1>15     </node3>16   </son>17 </root>

方法一: 

  读取xml采用去除空白的模式,在最后保存时让libxml自动补充空白。  

doc = xmlReadFile(docname, "UTF-8", XML_PARSE_NOBLANKS);// 此处可加入xml增删修改处理... nRel = xmlSaveFormatFileEnc(docname, doc, "UTF-8", 1);

  这种方法是最简单的,若原来功能已经做好了,只需要修改很少代码就可以达到效果;而且此方法大多数情况下都是有效可行的。

 

方法二: 

  插入新节点时,在后面多插入一个Text节点,内容带换行字符"\n";若当前节点没有文本内容,可以设Content内容,同样带"\n"。

node1 = xmlNewNode(NULL,BAD_CAST"DataNode");node2 = xmlNewText(BAD_CAST "\n            ");// 此处node1可加入额外属性设置代码...xmlAddChild(node, node1);xmlNodeSetContent(node1, BAD_CAST  "\n              ");xmlAddNextSibling(node1, node2);

  方法一无法达到效果,或不能使用NOBLANKS模式,也可以尝试用此方法二;本方法是一定可行的,只是控制上稍微麻烦一些。

 

附上测试效果: 

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <root> 3   <newNode1>newNode1 content</newNode1> 4   <newNode2>newNode2 content</newNode2> 5   <newNode3>newNode3 content</newNode3> 6   <node2 attribute="yes"> 7     <DataNode Ref="IIIIIIIIIIIIIIIIII" Name="JJJJJJJJJJJJJJJJJ">30</DataNode> 8   </node2> 9   <son>10     <grandson>grandson content</grandson>11     <grandson2>This is a grandson2 node</grandson2>12     <node2 attribute="no">13       <DataNode Ref="IIIIIIIIIIIIIIIIII" Name="JJJJJJJJJJJJJJJJJ">30</DataNode>14     </node2>15     <node3 attribute="1123">16       <node1>17         <node2 attribute="nothing">18           <DataNode Ref="IIIIIIIIIIIIIIIIII" Name="JJJJJJJJJJJJJJJJJ">30</DataNode>19         </node2>20       </node1>21     </node3>22   </son>23 </root>

  

最后附上下载地址:

1. 《Libxml 简单教程》下载

2. 方法一的测试源代码下载

 

libxml两种换行方法