3

古い FrameMaker ドキュメントを XML に変換しています。私の仕事はこれを変換することです:

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

これに:

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

その部分については(まだ)心配していません。私を困惑させているのは、ProcessingInstructionsがドキュメント全体にあり、潜在的に任意の要素の下にある可能性があるため、ツリー全体を検索し、それらを見つけて処理できる必要があるということです. を使用して XML ツリー全体を反復処理する方法がわかりませんminidom。秘密のメソッド/イテレータがありませんか? これは私がこれまで見てきたものです:

  • Elementtreeには、深さ優先検索という優れたElement.iter()方法がありますが、s は処理されませんProcessingInstruction

  • ProcessingInstructionminidomsにはタグ名がないため、 を使用して検索することはできませんgetElementsByTagName

  • xml.saxContentHandler.processingInstruction作成にのみ使用されるようProcessingInstructionです。

独自の深さ優先検索アルゴリズムを作成する以外ProcessingInstructionに、XML ファイル内の のリストを生成したり、それらの親を特定したりする方法はありますか?

4

1 に答える 1

2

lxmlモジュールの XPath API を次のように使用します。

from lxml import etree

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

node test processing-instruction() は、どの処理命令にも当てはまります。processing-instruction() テストには、リテラルの引数が含まれる場合があります。この場合、リテラルの値と同じ名前を持つすべての処理命令に当てはまります。

参考文献

于 2016-03-18T00:18:48.110 に答える