0

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

1 回答 1

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属性值:ACLineSegmentTerminal

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

于 2013-07-22T02:27:25.897 回答