2010-06-18 49 views
0

我有一个XML文件,像这样:Node.TEXT_NODE具有的价值,但我需要的属性

<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

这里,你可以达到什么样的一个简单的例子:

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>