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



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

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

:

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

我还不担心那部分;让我感到困惑的是,ProcessingInstruction在文档中到处都是,可能在任何元素下,所以我需要能够搜索整个树,找到它们,然后处理它们。我不知道如何使用minidom遍历整个XML树。我是否遗漏了一些秘密方法/迭代器?这是我目前看到的内容:

  • Elementtree具有优秀的Element.iter()方法,即深度优先搜索,但不处理ProcessingInstruction s。

  • ProcessingInstruction s没有标签名,所以我无法使用minidomgetElementsByTagName来搜索它们。

  • xml.saxContentHandler.processingInstruction看起来像是只用于创建ProcessingInstruction

缺少创建我自己的深度优先搜索算法,是否有一种方法可以在XML文件中生成ProcessingInstruction s列表,或者识别它们的父母?

使用lxml模块的XPath API:

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

节点测试处理指令()对任何处理指令都为真。处理指令()测试可以有一个参数Literal;在本例中,对于任何名称等于Literal值的处理指令都是如此。

引用

  • XPath和XSLT与lxml
  • XML路径语言1.0:节点测试

相关内容

  • 没有找到相关文章

最新更新