Node.TEXT_NODE有值,但我需要属性

0 投票
1 回答
808 浏览
提问于 2025-04-16 00:09

我有一个这样的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.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(编译错误:

1 个回答

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>里面有嵌套的元素,可能会出问题。

撰写回答