我有一个像这样的xml文件:
<host name='ip-10-196-55-2.ec2.internal'>
<hostvalue name='arch_string'>lx24-x86</hostvalue>
<hostvalue name='num_proc'>1</hostvalue>
<hostvalue name='load_avg'>0.01</hostvalue>
</host>
我可以从Node.TEXT_NODE中获取Node.data,但是我还需要属性名称,就像我想知道load_avg = 0.01一样,而不是逐个编写load_avg,num_proc等。我想要他们所有人。
我的代码看起来像这样,但我无法弄清楚Node的哪个部分具有属性名称。
for stat in h.getElementsByTagName("hostvalue"):
for node3 in stat.childNodes:
attr = "foo"
val = "poo"
if node3.nodeType == Node.ATTRINUTE_NODE:
attr = node3.tagName
if node3.nodeType == Node.TEXT_NODE:
#attr = node3.tagName
val = node3.data
从上面的代码中,我能够得到val,但不能得到attr(编译错误:
答案 0 :(得分:0)
这是你可以实现的一个简短例子:
from xml.dom import minidom
xmldoc = minidom.parse("so.xml")
values = {}
for stat in xmldoc.getElementsByTagName("hostvalue"):
attr = stat.attributes["name"].value
value = "\n".join([x.data for x in stat.childNodes])
values[attr] = value
print repr(values)
根据您的XML文件输出:
$ ./parse.py
{u'num_proc': u'1', u'arch_string': u'lx24-x86', u'load_avg': u'0.01'}
请注意,这不是故障安全的,即如果您在<hostvalue>
内嵌套了元素。