2016-07-06 60 views
1

我有一个脚本,通过目录中的所有XML文件,然后解析这些XML文件以获取元素IS标记ICP中的数据。但是,这些XML文件有几千个,其中一些可能没有IS中的标记ICP。有没有办法通过minidom来做到这一点? XML的Minidom - 检查标记是否存在于XML中

例子中,我分析有元素IS和标签ICP

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

XML我解析有元素IS的例子,但没有标签ICP

<is ico="000000000"> 

这里我的脚本显然失败,因为没有ICP。如何检查ICP标签的存在?

我的脚本:

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

我GOOGLE了很多,但如果一个标签使用minidom命名存在于XML我不能得到关于如何检查一个简单的答案。

你能给我一些建议吗?

回答

2

检查icp存在可以使用hasAttribute(attributeName)方法:

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

您可以通过期运用in操作

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