zoukankan      html  css  js  c++  java
  • 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节点,内容带换行字符" ";若当前节点没有文本内容,可以设Content内容,同样带" "。

    node1 = xmlNewNode(NULL,BAD_CAST"DataNode");
    node2 = xmlNewText(BAD_CAST "
                ");
    // 此处node1可加入额外属性设置代码...
    xmlAddChild(node, node1);
    xmlNodeSetContent(node1, BAD_CAST  "
                  ");
    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. 方法一的测试源代码下载

  • 相关阅读:
    C语言、指针(七)
    C语言、指针(六)
    C语言、指针(五)
    Android进阶之绘制-自定义View完全掌握(三)
    Android进阶之绘制-自定义View完全掌握(四)
    Android进阶之绘制-自定义View完全掌握(五)
    版本管理·玩转git(快速入门git)
    版本管理·玩转git(推到远程仓库)
    版本管理·玩转git(团队合作)
    版本管理·玩转git(日志查看与版本切换)
  • 原文地址:https://www.cnblogs.com/yisonli/p/4186359.html
Copyright © 2011-2022 走看看