找到遗失的标签

时间:2013-07-22 00:18:55

标签: python xml dom

我想对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

1 个答案:

答案 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,则该项目没有任何内容。