Python minidom:如何访问元素

时间:2013-04-24 15:48:06

标签: python xml minidom

我正在使用Python解析XML-Sheet。 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

##########解决方案

所以这就是我解决问题的方法: 从xml.etree导入cElementTree作为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)

2 个答案:

答案 0 :(得分:0)

这有用吗? (我在python上的表现并不是很神奇)

name[0].firstChild.nodeValue

答案 1 :(得分:0)

如果可以提供帮助,请不要使用minidom API。请改用ElementTree API; xml.dom.minidom documentation explicitly states that

  

尚未熟悉DOM的用户应考虑使用xml.etree.ElementTree模块进行XML处理。

以下是使用ElementTree API访问元素的简短示例:

from xml.etree import ElementTree as ET

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

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

这使用XPath表达式列出info1元素中包含的所有element元素,而不管它们在整个XML文档中的位置。

如果您只需要第一个 info1元素,请使用.find()

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

使用DOM API,.firstChild可以很容易地成为Text节点,而不是Element节点;您始终需要遍历.childNotes序列才能找到第一个Element匹配项:

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

但是对于您的情况,可能使用.getElementsByTagName()就足够了:

root.getElementsByTagName('info1').data