【发布时间】:2015-08-02 07:42:21
【问题描述】:
我们正在将古老的 FrameMaker 文档转换为 XML。我的工作是转换这个:
<?FM MARKER [Index] foo, bar ?>`
到这里:
<indexterm>
<primary>foo, bar</primary>
</indexterm>
我不担心那部分(还);让我难过的是ProcessingInstructions 遍布文档并且可能位于任何元素下,因此我需要能够搜索整个树,找到它们,然后处理它们。我不知道如何使用minidom 遍历整个 XML 树。我错过了一些秘密方法/迭代器吗?到目前为止,这是我所看到的:
Elementtree具有出色的Element.iter()方法,这是一种深度优先搜索,但它不处理ProcessingInstructions。ProcessingInstructions 没有标签名称,所以我无法使用minidom的getElementsByTagName搜索它们。xml.sax的ContentHandler.processingInstruction看起来只用于创建ProcessingInstructions。
没有创建我自己的深度优先搜索算法,有没有办法在 XML 文件中生成 ProcessingInstructions 的列表,或者识别他们的父母?
【问题讨论】:
-
对我来说听起来像是预处理 - 将 PI 转换为普通标签,为此编写一些专门的小型预处理脚本。然后,使用 ElementTree 进行处理。
-
你考虑过lxml吗?
tree.xpath('//processing-instruction()')应该返回树中的所有 PI...
标签: python xml elementtree minidom processing-instruction