469,275 Members | 1,773 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,275 developers. It's quick & easy.

xml.dom.minidom - documentElement vs. childNodes

I'm getting somewhat painfully acquainted with xml.dom.minidom. What is the
relationship between its documentElement attribute and its childNodes list?
I thought XML documents consisted of a single, possibly compound, node. Why
is a list of childNodes needed?

Thx,

Skip
Jul 18 '05 #1
4 5038
Skip Montanaro wrote:
I'm getting somewhat painfully acquainted with xml.dom.minidom. What is
the relationship between its documentElement attribute and its childNodes
list?
I thought XML documents consisted of a single, possibly compound, node.
Why is a list of childNodes needed?

import xml.dom.minidom as md
dom = md.parseString("""<?xml version="1.0" ?><!--comment--><root/>""")
dom.childNodes [<DOM Comment node "comment">, <DOM Element: root at 0x4038c1ac>]


Seems like comments are preserved in childNodes, too.

Peter

Jul 18 '05 #2
Skip Montanaro wrote:
I'm getting somewhat painfully acquainted with xml.dom.minidom. What is
the relationship between its documentElement attribute and its childNodes
list?
I thought XML documents consisted of a single, possibly compound, node.
Why is a list of childNodes needed?


Maybe for reasons of orthogonality? In java, the document class implements
the node interface also. So it seems as if dom treats documents as special
cases of nodes.

--
Regards,

Diez B. Roggisch
Jul 18 '05 #3
In response to:
I'm getting somewhat painfully acquainted with xml.dom.minidom. What
is the relationship between its documentElement attribute and its
childNodes list? I thought XML documents consisted of a single,
possibly compound, node. Why is a list of childNodes needed?
Peter provided this interpreter session:
import xml.dom.minidom as md
dom = md.parseString("""<?xml version="1.0" ?><!--comment--><root/>""")
dom.childNodes [<DOM Comment node "comment">, <DOM Element: root at 0x4038c1ac>]

So a document can have multiple nodes. It appears they can only have a
single Element node though:
dom = md.parseString("""<?xml version="1.0" ?><!--comment--><root/><root2/>""")

Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/Users/skip/local/lib/python2.4/xml/dom/minidom.py", line 1925, in parseString
return expatbuilder.parseString(string)
File "/Users/skip/local/lib/python2.4/xml/dom/expatbuilder.py", line 940, in parseString
return builder.parseString(string)
File "/Users/skip/local/lib/python2.4/xml/dom/expatbuilder.py", line 223, in parseString
parser.Parse(string, True)
ExpatError: junk after document element: line 1, column 43
...

I guess the documentElement attribute of the dom refers to that lone Element
node.

Thanks,

Skip
Jul 18 '05 #4
Peter Otten <__*******@web.de> wrote in message news:<ch*************@news.t-online.com>...
Skip Montanaro wrote:
I'm getting somewhat painfully acquainted with xml.dom.minidom. What is
the relationship between its documentElement attribute and its childNodes
list?
I thought XML documents consisted of a single, possibly compound, node.
Why is a list of childNodes needed?

import xml.dom.minidom as md
dom = md.parseString("""<?xml version="1.0" ?><!--comment--><root/>""")
dom.childNodes [<DOM Comment node "comment">, <DOM Element: root at 0x4038c1ac>]


Seems like comments are preserved in childNodes, too.


Comments, processing instructions and whitespace text nodes can come
before the document element, and in that way becoem the children of
the document node. Minidom doesn't keep document-level whitespace,
but som DOM impls do.

Furthermore the doctype of the document is a child of the document
node. It can be an actual doc type declaration:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns:ft="http://xmlns.4suite.org/ext"
xmlns:sun="http://metadata.central/swordfish/1.0/"
xmlns="http://www.w3.org/1999/xhtml"
lang="en">
[SNIP]

Or an implicit one, as in your example (where the only doctype
information is the document type element).

All that having been said, I must add that in the words of Guido "DOM
sucks".

We designed Domlette to ignore some of the madness of the full DOM
spec (though it does support multiple children for the document node,
which is pwerfectly fine and useful).

--
Uche Ogbuji Fourthought, Inc.
http://uche.ogbuji.net http://4Suite.org http://fourthought.com
Meet me at XMLOpen Sept 21-23 2004, Cambridge, UK. http://xmlopen.org

A hands-on introduction to ISO Schematron -
http://www-106.ibm.com/developerwork...ematron-i.html
Practical (Python) SAX Notes -
http://www.xml.com/pub/a/2004/08/11/py-xml.html
XML circles the globe - http://www.javareport.com/article.asp?id=9797
Element structures for names and addresses -
http://www.ibm.com/developerworks/xm...x-elemdes.html
Commentary on "Objects. Encapsulation. XML?" -
http://www.adtmag.com/article.asp?id=9090
Harold's Effective XML -
http://www.ibm.com/developerworks/xm...x-think25.html
A survey of XML standards -
http://www-106.ibm.com/developerwork...rary/x-stand4/
Jul 18 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Vincent De Baere | last post: by
5 posts views Thread by Skip Montanaro | last post: by
1 post views Thread by Greg Wogan-Browne | last post: by
4 posts views Thread by webdev | last post: by
1 post views Thread by Dean Card | last post: by
4 posts views Thread by bkamrani | last post: by
1 post views Thread by Maksim Kasimov | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.