首页 > 解决方案 > 如何使用 lxml 删除 XML 文档根元素之外的注释

问题描述

我有一些 Python,我正在尝试从我无法控制的各种 XML 文档中删除所有注释。这应该能够处理任何有效的 XML。这是到目前为止的代码:

tree = lxml.etree.parse(path_to_xml_file)
for c in tree.xpath('//comment()'):
  c.getparent().remove(c)

此代码在此特定 XML 文件上崩溃:

<!-- This comment can't be removed. -->
<foo>
  <!-- This comment can be removed. -->
</foo>

无法删除第一条评论,因为它没有父元素。c.getparent()返回None该评论。我没有看到有关如何从 XML 树中删除节点的任何其他文档。这是有效的 XML。那么如何删除这条评论呢?

标签: pythonxmllxml

解决方案


要删除所有评论,请使用XMLParserwith remove_comments=True

from lxml import etree

parser = etree.XMLParser(remove_comments=True)
tree = etree.parse("test.xml", parser)

推荐阅读