2013-07-22 141 views
0

我是想就XML文件中的測試,以找出其中特定標籤缺失(標記「終端」)的地方,但我的測試效果不好尋找丟失的標籤

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

是的,我沒有從我的測試中得到答案。我在看的是獲得不包含標籤終端的區塊的名稱(例如:「T263」)。 – yok

+0

@ user2586513:請編輯您的答案以包含信息。 –

回答

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') 

此代碼打印的0值每ACLineSegment元素屬性,它不包含Terminal元素:

T263 

編輯: 要更加succint你可以使用:

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,那麼該項目沒有任何。

+0

儘管我沒有得到第二個解決方案,但它完美地感謝你的工作。 – yok

+0

檢查最後更新的部分。 – korylprince

+2

@ user2586513如果這個答案幫助你解決了你的問題,你應該考慮[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)這個答案。 –