2013-07-22 3 views
0

я хотел бы сделать тест на файл XML, чтобы найти место, где не хватает конкретного TAG (Тег «Terminal»), но мой тест не работают хорошонайти недостающий теги

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 

здесь является Exemple моего файла 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') 

Этот код выводит значениеатрибут каждого ACLineSegment элемента, который не содержит Terminal элемент:

T263 

Edit: Чтобы быть еще более 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) этот ответ, если он помог вам решить вашу проблему. –

Смежные вопросы