2017-07-25 2 views
1

ich eine XML-Datei mit dieser Struktur haben:Python minidom Prüfungselement existiert

<?DOMParser ?> 
<logbook:LogBook xmlns:logbook="http://www/logbook/1.0" version="1.2"> 
<visits> 
<visit> 
    <general> 
     <technology>EB</technology> 
    </general> 
</visit> 
<visit> 
<general> 
    <grade>23242</grade> 
    <technology>EB</technology> 
</general> 
</visit> 
</visits> 
</logbook:LogBook> 

Ich möchte überprüfen, ob jede Spalte in dem Tag visit vorhanden ist, und wenn es nicht vorhanden Ich möchte keine zurückzukehren, so Ich habe diesen Code geschrieben:

import xml.dom.minidom as minidom 
mydict={} 
columnsLst=['grade','technology'] 
doc=minidom.parse('file.xml') 
visitcount=len(doc.getElementsByTagName('visit')) 
for i in range(visitcount): 
    for c in columnsLst: 
     if(doc.getElementsByTagName(c)[i].firstChild): 
     mydict[c]=doc.getElementsByTagName(c)[i].firstChild.data 
    print(mydict) 

Dies funktioniert nicht, da es keine zurückgibt für Elemente, die nicht existiert. und ich bekomme index error seit grade existiert nicht für die erste visit.

versuchte ich this solution auch hasChild() zu verwenden, aber es gibt Fehler:

'Element' object has no attribute 'hasChild' 

Jede Idee hier?

Antwort

1

Question: minidom check element exists

Statt mit Indizes des fideling verwenden Sie das Ergebnis Nodelisten, zum Beispiel:

# Get List of Nodes with Tag <visit> 
visits = doc.getElementsByTagName('visit') 

# Iterate NodeList 
for n, visit in enumerate(visits, 1): 
    print('{}:{}'.format(n, visit)) 

    # Get SubNodes with Tag <general> 
    general = visit.getElementsByTagName('general') 

    # First Error Condition 
    if general: 
     # Iterate all Tag Names 
     for subtag in ['grade', 'technology']: 
      # Second Error Condition, assuming only ONE SubNode <general> 
      if not general[0].getElementsByTagName(subtag): 
       print('\tMissing Subtag <{}>'.format(subtag)) 
    else: 
     print('\tMissing Tag <general>') 

Output:

<Element {http://www/logbook/1.0}LogBook at 0xf707f52c> 
1:<DOM Element: visit at 0xf6a6125c> 
    Missing Subtag <grade> 
2:<DOM Element: visit at 0xf6a6184c> 

mit Python getestet: 3.4.2

Verwandte Themen