3

在 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 大师会启发吗?

4

2 回答 2

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可能被认为是不幸的,但您始终可以坚持使用记录的,因此可以说是正确的属性名称,nodeValue。是的,它很冗长,但是所有的都是如此minidom,并且比出色的xml.etree.ElementTree慢(尤其是在后者的 C 实现中xml.etree.cElementTree),所以大概如果您选择使用minidom它一定是因为您喜欢大量冗长...;-)。

于 2010-05-07T02:25:26.903 回答
0

哎呀,以前从来没有注意到这一点。你不是在开玩笑,node.value在任何地方都没有提到。def __setitem__尽管在 xml.dom.minidom中,但它肯定是在代码中设置的。

不知道该说什么,看来您必须使用它。

于 2010-05-07T02:00:39.497 回答