首页 > 代码库 > 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两种换行方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。