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 表达式来列出info1元素中包含的所有元素element,而不管它们在整个 XML 文档中的位置。

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

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

使用DOMAPI​​,.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
于 2013-04-24T15:51:33.873 回答