繁体   English   中英

Python minidom 检查元素是否存在

[英]Python minidom check element exists

我有一个具有这种结构的 xml 文件:

<?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>

我想检查visit标签中是否存在每一列,如果不存在我想返回None,所以我写了这段代码:

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)

这不起作用,因为它不会为不存在的元素返回 None 。 我得到index error因为第一次visit不存在grade

我也尝试过这个解决方案来使用 hasChild() 但它给出了错误:

 'Element' object has no attribute 'hasChild'

这里有什么想法吗?

问题:minidom 检查元素存在

而不是使用索引使用结果节点列表,例如:

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

输出

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

用 Python 测试:3.4.2

是的,我遇到了同样的问题,看起来没有方法可以检查元素是否存在。

您可以先使用getElementsByTagName()按名称获取元素,然后检查 NodeList 的长度。 例如:

    for xml_txt in test:
        DOMTree = xml.dom.minidom.parseString(xml_txt)
        b = DOMTree.getElementsByTagName('Track')
        if len(b) == 0:
            continue
        else:
            b = b[0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM