python xml.dom.minidom.Attr问题

时间:2010-05-07 01:52:49

标签: python xml minidom

在Python中使用minidom获取属性,使用“attributes”属性。例如node.attributes["id"].value

所以,如果我有<a id="foo"></a>,那应该给我"foo"node.attributes["id"]不返回指定属性的值,而是返回xml.dom.minidom.Attr实例的值。 但是,通过Attr查看help('xml.dom.minidom.Attr')的帮助,无处可提到这个神奇的"value"属性。我喜欢通过查看类型层次结构,实例方法等来学习API。这个"value"属性来自哪里?为什么它没有列在Attr类'页面中?提到的唯一数据描述符是isIdlocalNameschemaType。它也不是从任何超类继承的。既然我是Python的新手,那么一些Python大师会启发吗?

2 个答案:

答案 0 :(得分:4)

minidom只是xml.dom接口的实现,因此任何专门针对minidom的文档都只会关于xml.dom本身的特性或限制

Attr上的xml.dom文档说,我引用:

  

Attr继承自Node,所以继承   它的所有属性。

Node上的文档实际上以不同的方式命名属性:nodeValue。但是,确实......:

>>> import xml.dom.minidom as xdm
>>> dom = xdm.parseString('<foo bar="baz"/>')
>>> root = dom.documentElement
>>> atr = root.getAttributeNode('bar')
>>> atr.nodeValue
u'baz'

记录的nodeValue属性具有_un_documented别名value这一事实可能被视为不幸,但您始终可以坚持使用已记录的,因此可以说是 right 属性名称,nodeValue。是的,它很冗长,但是所有minidom都是如此,并且比优秀的xml.etree.ElementTree慢(特别是在后者的C实现中,xml.etree.cElementTree),所以大概是你选择的使用minidom必须是因为你喜欢广泛的冗长...; - )。

答案 1 :(得分:0)

Geez,之前从未注意过。你不是在开玩笑,node.value在任何地方都没有提到。它绝对是在xml.dom.minidom中的def __setitem__下的代码中设置的。

不确定该说什么,看起来你必须使用它。