如何在Python的xml minidom中获取直接子节点而非子孙节点的相同标签名
我在用xml minidom从xml文件中获取一些数据,但一直得不到想要的结果……我尝试了很多这个网站上关于xml minidom的代码,但都失败了……这是我的示例xml文件……
<computer>
<parts>
<text>Required</text>
</parts>
<parts>
<text>Required</text>
<parts>
<text>?Not Required</text>
</parts>
<parts>
<text>?Not Required</text>
</parts>
</parts>
<parts>
<text>Required</text>
<parts>
<text>Not Required</text>
</parts>
</parts>
<parts>
<text>Required</text>
</parts>
</computer>
我想获取文本“required”,但输出却是这样的
Required
Required
Not Required
Not Required
Required
Not Required
Required
这是我的代码示例,它能从文件中获取所有文本,但我需要的是那些直接属于父标签的标签中的文本……
from xml.dom import minidom
file=('d:\sample.xml')
xmldoc=minidom.parse(file)
parentnode = xmldoc.getElementsByTagName('computer')
for node in parentnode:
alist=node.getElementsByTagName('text')
for a in alist:
t=a.childNodes[0].nodeValue
print authortext
我想要的输出结果是这样的
Required
Required
Required
Required
1 个回答
5
除非你的XML文件复杂得多,否则你可以通过DOM树来找到你想要的子节点,这些子节点是属于computer
节点下的parts
节点里的text
子节点。
import xml.dom.minidom
file=('sample.xml')
xmldoc=xml.dom.minidom.parse(file)
computerNode = xmldoc.getElementsByTagName('computer')
for computerChild in computerNode:
for parts in computerChild.childNodes:
for partsChild in parts.childNodes:
if partsChild.nodeType == xml.dom.Node.ELEMENT_NODE:
if partsChild.tagName == 'text':
print partsChild.childNodes[0].nodeValue
为了使用XPath,就像我之前提到的,以及更简单的DOM导航,最好使用Element Tree API。