0

Python で XML シートの解析に取り組んでいます。XML には次のような構造があります。

<layer1>
    <layer2>
        <element>
            <info1></info1>
        </element>
        <element>
            <info1></info1>
        </element>
        <element>
            <info1></info1>
        </element>
    </layer2>
</layer1>

layer2 がなければ、info1 のデータに問題なくアクセスできます。ただ、layer2は本当に困ります。彼らの私はinfo1に次のように対処できます:root.firstChild.childNodes[0].childNodes[0].data

だから私の考えは、次のように似たことができるということでした:root.firstChild.firstChild.childNodes[0].childNodes[0].data

########## 解決

これが私の問題を解決した方法です: from xml.etree import cElementTree as ET

xml.etree から cElementTree を ET としてインポート

tree = ET.parse("test.xml")
root = tree.getroot()

for elem in root.findall('./layer2/'):
    for node in elem.findall('element/'):
        x = node.find('info1').text
        if x != "abc":
            elem.remove(node)
4

2 に答える 2

0

これは機能しますか?(私はPythonで驚くべきことではありません。ちょっと考えただけです)

name[0].firstChild.nodeValue
于 2013-04-24T15:51:14.273 に答える
0

minidomできる限り API を使用しないでください。代わりにElementTree APIを使用してください。xml.dom.minidomドキュメントには、次のように明示的に記載されています。

DOM にまだ慣れていないユーザーは、xml.etree.ElementTree代わりに XML 処理にモジュールを使用することを検討する必要があります。

ElementTreeAPI を使用して要素にアクセスする短いサンプルを次に示します。

from xml.etree import ElementTree as ET

tree = ET.parse('inputfile.xml')

for info in tree.findall('.//element/info1'):
    print info.text

これは、XPath 式を使用して、XML ドキュメント全体での位置に関係なくinfo1、要素内に含まれるすべての要素を一覧表示します。element

必要なのは最初の info1要素だけの場合は、次を使用します.find()

print tree.find('.//info1').text

DOMAPI を使用すると、ノードではなく.firstChild簡単にノードにすることができます。最初の一致を見つけるには、常にシーケンスをループする必要があります。TextElement.childNotesElement

def findFirstElement(node):
    for child in node.childNodes:
        if child.nodeType == node.ELEMENT_NODE:
            return child

しかし、あなたの場合、おそらくsufficesを使用してください.getElementsByTagName()

root.getElementsByTagName('info1').data
于 2013-04-24T15:51:33.873 に答える