Getting attributes using minidom in Python, one uses the "attributes" property. e.g. node.attributes["id"].value
So if I have <a id="foo"></a>
, that should give me "foo"
. node.attributes["id"]
does not return the value of the named attribute, but an xml.dom.minidom.Attr
instance.
But looking at the help for Attr
, by doing help('xml.dom.minidom.Attr')
, nowhere is this magic "value"
property mentioned. I like to learn APIs by looking at the type hierarchy, instance methods etc. Where did this "value"
property come from?? Why is it not listed in the Attr
class' page? The only data descriptors mentioned are isId
, localName
and schemaType
. Its also not inherited from any superclasses. Since I'm new to Python, would some of the Python gurus enlighten?
The minidom
is just an implementation of the xml.dom
interfaces, so any docs specifically on minidom will only be about its peculiarities or limitations wrt xml.dom
itself.
The xml.dom
docs on Attr say, and I quote:
Attr inherits from Node, so inherits all its attributes.
The docs on Node actually name the attribute differently: nodeValue
. But, indeed...:
>>> import xml.dom.minidom as xdm
>>> dom = xdm.parseString('<foo bar="baz"/>')
>>> root = dom.documentElement
>>> atr = root.getAttributeNode('bar')
>>> atr.nodeValue
u'baz'
The fact that the documented nodeValue
attribute has an _un_documented alias value
may be considered unfortunate, but you can always stick with the documented, and therefore arguably right, attribute name, nodeValue
. Yes, it's verbose, but then so is all of minidom
, as well as slower than the excellent xml.etree.ElementTree (esp. in the latter's C implementation, xml.etree.cElementTree
), so presumably if you choose to use minidom
it must be because you like extensive verbosity...;-).