gpt4 book ai didi

Python minidom 检查元素是否存在

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:16 25 4
gpt4 key购买 nike

我有一个具有这种结构的 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,因为 grade 对于第一次 visit 不存在。

我试过了 this solution以及使用 hasChild() 但它给出错误:

 'Element' object has no attribute 'hasChild'

有什么想法吗?

最佳答案

Question: minidom check element exists

使用生成的节点列表代替索引,例如:

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

使用 Python 测试:3.4.2

关于Python minidom 检查元素是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45303176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com