2013-03-22 99 views
16

我解析在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') 

我要检查标签,然后把他们的价值观。

回答

40

如果标签不存在,.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. 
+0

@Martjin皮特斯你提到:我如何在Python写的,如果我希望写一些像 - 如果派对!=无: – Abhishek 2013-03-22 13:41:33

+4

@Ahhishek:'如果派对不是无'。参见[python比较运算符](http://docs.python.org/2/reference/expressions.html#not-in)。 – 2013-03-22 13:53:45

+0

谢谢你还提到如何检查属性。非常好的答案。 – SSchneid 2016-09-20 07:18:58