2014-02-18 22 views
0

我有一个XML字符串,我从包含状态信息的API接收。根据操作是否成功,XML中可能有不同的元素。当元素可能不总是存在时解析XML片段

一个例子是如下:

<?xml version="1.0" encoding="UTF-8"?> 
<content> 
<status>ok</status> 
<response>ok</response> 
<jobid>[integer]</jobid> 
</content> 

或可能:

<?xml version="1.0" encoding="UTF-8"?> 
<content> 
<status>fail</status> 
<error>missingdata</error> 
</content> 

我试图使用ElementTree的解析XML数据,并拉出每个项目的值,转换他们到字符串(如有必要),保存到变量并将数据写入日志文件。抛出我的部分是我无法确定哪些元素会在那里。

我一直在使用这个链接为指导: http://docs.python.org/2/library/xml.etree.elementtree.html

回答

0

这是读取XML数据并将其存储在一个字典中的所有现有元素的例子:

import xml.etree.ElementTree as et 

xml1="""<?xml version="1.0" encoding="UTF-8"?> 
<content> 
<status>ok</status> 
<response>ok</response> 
<jobid>[integer]</jobid> 
</content> 
""" 

xml2="""<?xml version="1.0" encoding="UTF-8"?> 
<content> 
<status>fail</status> 
<error>missingdata</error> 
</content> 
""" 

def get_elements(xml_input): 
    ret = {} 
    tree = et.fromstring(xml_input) 

    for el in tree: 
     ret[el.tag] = el.text 

    return ret 

print get_elements(xml1) 
print get_elements(xml2) 
0

尝试使用try /除外:

import xml.etree.ElementTree as ET 
from lxml import etree 
tree = ET.parse('test.xml') 
root = tree.getroot() 

for child in root: 
    try: 
     x = child.find('response').text 
    except AttributeError: 
     continue 

如果有response元素,X会给值,否则跳过它。使用所有可能的元素

0

我建议我们创建一个简单的类来解析XML,转向所有二级节点转换为对象属性。然后,我们可以检查状态是否为好吧失败并采取相应措施。下面是一个示例:

​​

为了简单起见,我不检查错误(例如未找到文件),但你应该。