解析具有类似标签和不同属性的xml文件!

时间:2010-06-03 18:44:08

标签: python

我很抱歉,如果这是一个重复的问题或基本的问题,因为我是Python的新手。我正在尝试解析以下XML命令,以便我可以“提取”Daniel和George的标记值。我希望答案看起来像Daniel = 78,George = 90。

<epas:property name="Tom">12</epas:property>
<epas:property name="Alice">34</epas:property>
<epas:property name="John">56</epas:property>
<epas:property name="Danial">78</epas:property>
<epas:property name="George">90</epas:property>
<epas:property name="Luise">11</epas:property>

xml命令存储在一个字符串中。即 myString 所以这是我试图解析这个字符串的代码的第一部分(myString):

element = xml.dom.minidom.parseString(myString).getElementByTagName ("epas:property")
if not element:
   print "error message"
else:
    for el in element:
        value [el.getAttribute("name")] = el.firstChild.data

我试图将Daniel和George引用到数组索引以获取值,但看起来我没有正确地执行它。非常感谢您对此的想法/意见。

干杯,比尔

1 个答案:

答案 0 :(得分:1)

不要使用xml.dom.minidom,这是一个糟糕的库!使用ElementTreelxml(ElementTree在标准库中,可能适用于您)。

应该有一个XML命名空间,例如xmlns:epas="http://something"。你也不能有裸元素,它们需要被封闭。如果你有“假的”命名空间(即没有声明),你可以踢和做:

myString = '<doc xmlns:epas="dummy">%s</doc>' % myString

使用ElementTree,它是这样的:

import xml.etree.ElementTree as ET
doc = ET.fromstring(myString)
result = {}
for el in doc.findall('{http://something}property):
    result[el.get('name')] = int(el.text)