2016-07-06 16 views
1

Ich habe ein Skript, das alle XML-Dateien im Verzeichnis durchsucht und dann diese XML-Dateien analysiert, um die Daten im Element IS tag ICP zu erhalten. Es gibt jedoch mehrere Tausend dieser XML-Dateien und einige von ihnen möglicherweise nicht ICP in IS. Gibt es eine Möglichkeit, dies über Minidom zu tun?Minidom - Überprüfen, ob das Tag in XML vorhanden ist

Beispiel für XML Ich bin Parsen, dass Element IS und Tag ICP:

<is ico="0000000000" pcz="1" icp="12345678" icz="12345678" oddel="99"> 

Beispiel für XML Ich bin Parsen dieses Element hat IS aber keinen Tag ICP:

<is ico="000000000"> 

Hier mein Skript offensichtlich fehlgeschlagen, da es keine ICP gibt. Wie kann man das Vorhandensein des Tags ICP prüfen?

Mein Skript:

import os 
from xml.dom import minidom 

#for testing purposes 
directory = os.getcwd() 

print("Zdrojový adresář je: " + directory) 
print("Procházím aktuální adresář, hledám XML soubory...") 
print("Procházím XML soubory, hledám IČP provádějícího...") 

with open ('ICP_all.txt', 'w') as SeznamICP_all: 
    for root, dirs, files in os.walk(directory): 
     for file in files: 
      if (file.endswith('.xml')): 
       xmldoc = minidom.parse(os.path.join(root, file)) 
       itemlist = xmldoc.getElementsByTagName('is') 
       SeznamICP_all.write(itemlist[0].attributes['icp'].value + '\n') 

print("Vytvářím list unikátních IČP...") 

with open ('ICP_distinct.txt','w') as distinct: 
    UnikatniICP = [] 
    with open ('ICP_all.txt','r') as SeznamICP_all: 
     distinct.writelines(set(SeznamICP_all)) 

input('Pro ukončení stiskni libovolnou klávesu...') 

gegoogelt ich viel, aber ich kann nicht eine einfache Antwort bekommen, wie zu überprüfen, ob ein Tag in XML minidom vorhanden ist.

Könnten Sie mir bitte einen Rat geben?

Antwort

2

Sie hasAttribute(attributeName) Methode useing verwenden können:

.... 
itemlist = xmldoc.getElementsByTagName('is') 
if itemlist[0].hasAttribute("icp"): 
    SeznamICP_all.write(itemlist[0].attributes['icp'].value + '\n') 
0

Sie können Anwesenheit von icp überprüfen in Betreiber

for item in itemlist: 
    if('icp' in item.attributes): 
     SeznamICP_all.write(item.attributes['icp'].value + '\n') 
     break;