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

Delete comments from xml file while parsing it using libxml

以下是 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 文件中完全删除注释 line/node,它应该如下所示:

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

我还参考了 libxml 文档,但这对 XML 文件中的 "comment/s" 没有多大帮助。

您可以在解析 xml 时使用 NodeType() 并检查每个节点是否是注释(8 表示注释,请参阅此处:http://xmlsoft.org/xmlreader.html#Extracting),然后使用 xmlUnlinkNode()xmlFreeNode().

我尝试了一种不同的方式,它奏效了。看起来使用 xmlreader 来修改 xml 不会有太大帮助,相反我做了 xmlReadMemory(),然后在解析时做了以下检查:

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

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