使用libxml解析时,从xml文件中删除注释

时间:2017-07-18 11:18:17

标签: c++ xml-parsing libxml2

以下是XML文件,其中一个节点(即<date>)被评论。

<?xml version="1.0"?>
<story>
  <info>
    <author>Abc Xyz</author>
    <!--<date>June 2, 2017</date> -->
    <keyword>example keyword</keyword>
  </info>
</story>

我想要的是使用libxml库从XML文件中完全删除注释的行/节点,它应如下所示:

<?xml version="1.0"?>
<story>
  <info>
    <author>Abc Xyz</author>
    <keyword>example keyword</keyword>
  </info>
</story>

我还提到了libxml文档,但这对XML文件中的“comment / s”没有多大帮助。

2 个答案:

答案 0 :(得分:1)

我尝试了另一种方式并且有效。看起来使用xmlreader来修改xml会有所帮助,而不是xmlReadMemory(),然后在解析后执行以下检查:

if(node->type == XML_COMMENT_NODE){ //node is of type xmlNodePtr
    xmlUnlinkNode(node);
    xmlFreeNode(node);
}

最后xmlDocDumpFormatMemory()将修改后的xml存储在xmlbuffer

答案 1 :(得分:0)

您可以在解析xml时使用NodeType()并检查每个节点是否为注释(8表示评论,请参见此处:http://xmlsoft.org/xmlreader.html#Extracting),然后使用xmlUnlinkNode()和{xmlFreeNode()将其删除{1}}。