【问题标题】:Minidom - check if tag is present in XMLMinidom - 检查标签是否存在于 XML 中
【发布时间】:2016-11-08 07:42:52
【问题描述】:

我有一个脚本,它遍历目录中的所有 XML 文件,然后解析这些 XML 文件以获取元素 IS 标记 ICP 中的数据。但是,这些 XML 文件有数千个,其中一些可能在 IS 中没有标签 ICP。有没有办法通过 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...')

我用谷歌搜索了很多,但我无法得到一个简单的答案,即如何使用 minidom 检查 XML 中是否存在标签。

你能给我一些建议吗?

【问题讨论】:

    标签: python xml python-3.x xml-parsing minidom


    【解决方案1】:

    你可以使用hasAttribute(attributeName)方法:

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

    【讨论】:

      【解决方案2】:

      您可以使用in 运算符检查icp 是否存在

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        相关资源
        最近更新 更多