我正在使用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)
答案 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