2010-06-18 45 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>