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

问题描述:

对不起,如果这是一个重复的问题或基本问题,因为我是Python新手。我试图解析下面的XML命令,以便我可以“提取”Daniel和George的标签值。我希望答案看起来像Daniel = 78,George = 90.解析具有相似标签和不同属性的xml文件!

<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 

我想引用丹尼尔和乔治数组索引获得的价值,但看起来我不是正确地做。我会很感激你对此的想法/评论。

欢呼声中,比尔

+0

把XML和Python代码,代码格式,因此会正确显示。 – 2010-06-03 18:47:22

+0

您是否收到错误? 如果将.getElementByTagName修复为.getElementsByTagName,并且将该xml片段包装在声明名称空间的根元素中,则其余部分应该可以工作。如果没有,你应该得到一个错误信息。 – 2010-06-03 19:04:55

+0

我正在尝试逐字解析问题中显示的XML吗?如果是这样,它不是有效的XML。需要有一个根元素来包含属性项。这可能是你的问题的原因。 – 2010-06-03 19:12:38

不要使用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) 
+0

谢谢伊恩。我安装了Python 2.5.4版本,但是我得到:“没有名为etree.ElementTree的模块作为ET”。正如你所说,ElenetTree是在标准库中,所以应该使用Python 2.5.4!我在这里错过了什么吗? :-) – 2010-06-04 16:03:01

+0

2.5应包含ElementTree。在某些操作系统上,它*可能是一个单独的安装(即,打包程序将其从标准库中分离出来)。你也可以只安装ElementTree,然后'将ElementTree导入为ET'。 – 2010-06-04 22:44:20