如何在解析之前检查XML中是否存在属性和标记?
问题描述:
我解析在python通过元素树一个XML文件,并写入内容到CPP文件。如何在解析之前检查XML中是否存在属性和标记?
儿童标签的内容将是不同的标签变种。例如,第一个事件标记具有派对标记作为子项,但第二个事件标记没有。
- >我如何检查不能解析之前标签是否存在?
- >儿童在1日的事件标签值属性,但不是在第二位。在获取它的价值之前,如何检查属性是否存在。
- >目前我的代码会因不存在的第三方代码错误,并为第二儿童标签的“无”属性值。
<main>
<event>
<party>Big</party>
<children type="me" value="3"/>
</event>
<event>
<children type="me"/>
</event>
</main>
代码:
import xml.etree.ElementTree as ET
tree = ET.parse('party.xml')
root = tree.getroot()
for event in root.findall('event'):
parties = event.find('party').text
children = event.get('value')
我要检查标签,然后把他们的价值观。
答
如果标签不存在,.find()
确实返回None
。只要该值测试:
for event in root.findall('event'):
party = event.find('party')
if party is None:
continue
parties = party.text
children = event.get('value')
你已经使用.get()
事件,以测试value
属性;如果该属性不存在,它也会返回None
。
属性存储在.attrib
字典,所以你可以使用标准的Python技术测试的属性明确过:如果一方是无
if 'value' in event.attrib:
# value attribute is present.
@Martjin皮特斯你提到:我如何在Python写的,如果我希望写一些像 - 如果派对!=无: – Abhishek 2013-03-22 13:41:33
@Ahhishek:'如果派对不是无'。参见[python比较运算符](http://docs.python.org/2/reference/expressions.html#not-in)。 – 2013-03-22 13:53:45
谢谢你还提到如何检查属性。非常好的答案。 – SSchneid 2016-09-20 07:18:58