Easy question on minidom

Alex Martelli aleax at mac.com
Sun Jun 18 01:22:42 EDT 2006


Dean Card <mailer at forums.com> wrote:

> I am using minidom to parse a 20,000 line XML file.  I have a few instances
> where the number of child nodes of a particular node can be variable in
> number.  To access them I am doing something like the following...
> 
> xmldoc = minidom.parseString(r)
> results = xmldoc.childNodes[0]
> 
> for myNode in results.childNodes[1].childNodes:
>     do Stuff with myNode...
> 
> problem is I am having a heck of a time trying to access the value of the
> node.  For instance I get things like this
> 
> <DOM Element: PersonName at 0x8391dac>
> <DOM Element: PostalAddress at 0x8391f0c>
> <DOM Element: VoiceNumber at 0x842a18c>
> <DOM Element: VoiceNumber at 0x842a32c>
> <DOM Element: E-mail at 0x842a4cc>
> 
> But I need the values... any help here? 

Not sure what you mean by "the values" -- if you mean for example the
contents of text data lying under the node, you can access them...:

>>> from xml.dom import minidom
>>> s='<foo><bar>uno</bar><baz>dos</baz></foo>'
>>> xmldoc = minidom.parseString(s)
>>> xmldoc.childNodes[0]
<DOM Element: foo at 0x81238>
>>> xmldoc.childNodes[0].childNodes
[<DOM Element: bar at 0x812d8>, <DOM Element: baz at 0x818f0>]
>>> for node in xmldoc.childNodes[0].childNodes: print node
... 
<DOM Element: bar at 0x812d8>
<DOM Element: baz at 0x818f0>
>>> for node in xmldoc.childNodes[0].childNodes: print
node.childNodes[0]
... 
<DOM Text node "uno">
<DOM Text node "dos">
>>> for node in xmldoc.childNodes[0].childNodes: print
node.childNodes[0].data
... 
uno
dos
>>> 

i.e., the text node is the .childNodes[0] (or more elegantly the
.firstChild, of course) of the element node containing it, and if you
need that text node's text data, that's its .data attribute.

If you need something else, I suggest you post a small example (like
mine here) with a clear explanation of what exactly it is that you need!


Alex



More information about the Python-list mailing list