我很抱歉,如果这是一个重复的问题或基本的问题,因为我是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引用到数组索引以获取值,但看起来我没有正确地执行它。非常感谢您对此的想法/意见。
干杯,比尔
答案 0 :(得分:1)
不要使用xml.dom.minidom,这是一个糟糕的库!使用ElementTree或lxml(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)