我想对XML文件进行测试以找到缺少特定TAG的位置(TAG'终端'),但我的测试效果不佳
from xml.dom import minidom
xmldoc = minidom.parse('c:\\test\mydoc.xml')
#printing the number of blocs in my xml file
itemlist = xmldoc.getElementsByTagName('ACLineSegment')
print('************')
for s in itemlist :
if s.childNodes['Name'].value == 'Terminal':
print s.childNodes['Name'].value
这是我的xml文件的例子:
<ACLineSegment Name="T261" Description="" aliasName="">
<Link_Conducting PathB=""/>
<Terminal Name="T1" Description="" aliasName="">
<Link_Terminal PathB=""/>
</Terminal>
<Terminal Name="T2" Description="" aliasName="">
<Link_Terminal PathB=""/>
</Terminal>
</ACLineSegment>
<ACLineSegment Name="T262" Description="" aliasName="">
<Link_Conducting PathB=""/>
<Terminal Name="T1" Description="" aliasName="">
<Link_Terminal PathB=""/>
</Terminal>
<Terminal Name="T2" Description="" aliasName="">
<Link_Terminal PathB=""/>
</Terminal>
</ACLineSegment>
<ACLineSegment Name="T263" Description="" aliasName="">
<Link_Conducting PathB=""/>
</ACLineSegment>
enter code here
答案 0 :(得分:1)
这样的事情怎么样:
from xml.dom import minidom
xmldoc = minidom.parse('c:\\test\mydoc.xml')
#printing the number of blocs in my xml file
itemlist = xmldoc.getElementsByTagName('ACLineSegment')
for item in itemlist:
found = False
for child in item.childNodes:
if child.nodeName == 'Terminal':
found = True
if not found:
print item.getAttribute('Name')
此代码打印不包含Name
元素的每个ACLineSegment
元素的Terminal
属性的值:
T263
修改强> 为了更加熟练,你可以使用:
for item in itemlist:
if len([x for x in item.childNodes if x.nodeName == 'Terminal']) == 0:
print item.getAttribute('Name')
这段代码基本上是相同的逻辑。内部[]
部分是一个非常有用的python List Comprehension。
它创建一个类型为Terminal
的所有子节点的列表。如果该列表的长度为0,则该项目没有任何内容。