使用minidom获取属性在Python中,可以使用" attributes“属性。例如node.attributes["id"].value
所以如果我有<a id="foo"></a>
,就会得到"foo"
。node.attributes["id"]
不返回命名属性的值,而是返回一个xml.dom.minidom.Attr
实例。但是通过执行help('xml.dom.minidom.Attr')
来查看对Attr
的帮助,并没有提到这个神奇的"value"
属性。我喜欢通过查看类型层次结构、实例方法等来学习"value"
。这个API属性是从哪里来的?为什么它没有列在Attr
类的页面中?唯一提到的数据描述符是isId
、localName
和schemaType
。它也不是从任何超类继承的。既然我是Python的新手,一些Python专家会给我一些启发吗?
发布于 2010-05-07 02:25:27
minidom
只是xml.dom
接口的一个实现,所以任何专门关于minidom的文档都只是关于它的特性或限制wrt xml.dom
本身。
Attr上的xml.dom
文档说,我引用一下:
属性继承自节点,因此继承其所有属性。
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-07 02:00:39
天啊,以前从来没注意过。你不是在开玩笑吧,任何地方都没有提到node.value
。它肯定是在代码中设置的,尽管是在xml.dom.minidom中的def __setitem__
下。
除了,我不知道该说什么,看起来你得用这句话。
https://stackoverflow.com/questions/2785703
复制