我有一个具有此结构的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
.
我也尝试了这个解决方案来使用 hasChild((,但它给出了错误:
'Element' object has no attribute 'hasChild'
这里有什么想法吗?
问题:迷你检查元素存在
与其使用索引,不如使用生成的节点列表,例如:
# 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]