0

Python を使用して XML ファイルを解析しようとしています。XML のサイズが大きいため、プル パーサーを使用したいと考えています。私はこれを見つけまし

私のコードはで始まります

doc = pulldom.parse("myfile.xml")
for event, node in doc:
    # code here...

私は使っている

if (node.localName == "b"):

XML タグ名を取得すると、正常に動作します。

タグの間からテキストを取得する方法がわかりません。node.nodeValueリターンの使用None

を使用node.toxml()してノードの完全な XML を取得できますが、必要なのはタグ間のテキストだけです。タグを取り出すために正規表現の置換を使用する以外にこれを行う方法はありnode.toxml()ますか?

4

1 に答える 1

1

テキスト付きのタグごとに、ローカル名が「b」の 2 つのノードがあります - aSTART_ELEMENTと an END_ELEMENT。通常、次のようなものを受け取る必要があります。

START_ELEMENT
CHARACTERS
END_ELEMENT

したがって、一致する開始要素の後の文字を探しています。次のようなことを試してみてください。

from xml.dom.pulldom import CHARACTERS, START_ELEMENT, parse

doc = parse("myfile.xml")
text_expected = False
for event, node in doc:
    print event, node
    if text_expected:
        text_expected = False
        if event != CHARACTERS:
            # strange .. there should be some
            continue
        print node.data
    else:
        text_expected = (event == START_ELEMENT) and (node.localName == "b")

これとともにmyfile.xml

<a>
    <b>c1</b>
    <b>c2</b>
</a>

出力を取得します

c1
c2

strip()各文字列が必要になる場合があり、他のすべてのイベントを無視する必要があることに注意してくださいCHARACTERS。2 つの要素の間のすべての改行と空白はCHARACTERS-event を生成します。

于 2012-11-22T15:23:59.887 に答える