-1

ネストされた要素を解析したいと思います。XPathElementを使用してもかまいません。たとえば、印刷したい値のいくつかは次のとおりです。

>>> root[0][0][0][0][0].tag
'{http://www.domain.com/somepath/Schema}element'
>>> root[0][0][0][0][0].text
'findme'

XML ドキュメントを反復処理し、解析してelement値を出力する理想的な方法は何でしょうか? これは、私が使用しているスキーマの例です。

<?xml version="1.0" encoding="UTF-8"?>
<data xsi:schemaLocation="http://www.domain.com/somepath/Schema file.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.domain.com/somepath/Schema">
    <one stuff0="" stuff1="">
        <two stuff0="" stuff1="">
            <three>
                <four stuff0="234234" stuff1="234324">
                    <element>findme</element>
                </four>
                <four stuff0="234234" stuff1="234324">
                    <element>findme2</element>
                </four>
                <four stuff0="234234" stuff1="234324">
                    <element>findme3</element>
                </four>
            </three>
        </two>  
    </one>
    <one stuff0="" stuff1="">
        <two stuff0="" stuff1="">
            <three>
                <four stuff0="234234" stuff1="234324">
                    <element>findme4</element>
                </four>
                <four stuff0="234234" stuff1="234324">
                    <element>findme5</element>
                </four>
                <four stuff0="234234" stuff1="234324">
                    <element>findme6</element>
                </four>
            </three>
        </two>  
    </one>
</data>

結果が返されませんが、次のことを試しました。これが機能したとしても、ルート1 [0] 1 [0][0] などの下の要素は表示されません。

>>> for tagname in root[0][0][1][0][0].findall('element'):
...   name = tree.get('element')
...   print name
...
>>>

この質問に従って、次のことも試しましたが成功しませんでした。

>>> for elem in doc.findall('one/two/three/four'):
...     print value.get('stuff1'), elem.text
...
>>>

問題が見つかりました:

Need Help using XPath in ElementTree を読んだ後に学んだ名前空間の仕様がないため、要素が読み取られていませんでした。したがって、次の例は機能します。

>>> import xml.etree.cElementTree as ET
>>> for event, element in ET.iterparse("schema.xml"):
...     if element.tag == "{http://www.domain.com/somepath/Schema}element":
...        print element.text
...
findme
findme2
findme3
findme4
findme5
findme6
4

1 に答える 1

0

あなたの XML 文書を見ないと確信が持てませんが、あなたがやりたいことは次のとおりだと思います。

test.xml

<?xml version="1.0"?>
<root>
  <group>
    <element>This is the first text</element>
  </group>
  <group>
    <element>This is the second text</element>
  </group>
  <group>
    <element>This is the third text</element>
  </group>
</root>

test.py

import xml.etree.cElementTree as ET

for event, element in ET.iterparse("test.xml"):
    if element.tag == "element":
       print element.text

これらのファイルを端末で実行すると、次のようになります。

mike@tester:~$ python test.py
This is the first text
This is the second text
This is the third text
于 2013-03-28T04:01:14.613 に答える