使用 Python 查找和转换 XML 处理指令

Finding and converting XML processing instructions using Python

我们正在将古老的 FrameMaker 文档转换为 XML。我的工作是转换这个:

<?FM MARKER [Index] foo, bar ?>` 

对此:

<indexterm>
    <primary>foo, bar</primary>
</indexterm>

我不担心那部分(还);令我感到困惑的是 ProcessingInstruction 遍及整个文档并且可能在任何元素下,因此我需要能够搜索整个树,找到它们,然后处理它们。我不知道如何使用 minidom 遍历整个 XML 树。我是否遗漏了一些秘密 method/iterator?这是我到目前为止所看到的:

如果没有创建我自己的 depth-first 搜索算法,有没有办法在 XML 文件中生成 ProcessingInstruction 的列表,或者识别他们的 parents ?

像这样使用 lxml 模块的 XPath API:

from lxml import etree

foo = StringIO('<foo><bar></bar></foo>')
tree = etree.parse(foo)
result = tree.xpath('//processing-instruction()')

The node test processing-instruction() is true for any processing instruction. The processing-instruction() test may have an argument that is Literal; in this case, it is true for any processing instruction that has a name equal to the value of the Literal.

参考资料