[XML-SIG] Multiple top nodes

Martin v. Loewis martin@loewis.home.cs.tu-berlin.de
Tue, 31 Oct 2000 22:17:10 +0100


> Which I would have expected, if it was trying to parse into a Document.

Well, you are trying to parse a document. At least this is what
FromXml* assumes.

It *will* assume that you want to create a DocumentFragment if you
pass it the ownerDocument parameter, e.g.

from xml.dom import implementation
from xml.dom.ext.reader import Sax2
Sax=Sax2

frag="""
<sometag>                                  
  <someinnertag/>
  <someinnertag/>
</sometag>

<sometag>
  <someinnertag/>                          
  <someinnertag/>
</sometag>
"""

doc = implementation.createDocument(None,None,None)
print Sax.FromXml(frag,ownerDocument=doc)

However, it still will use a SAX parser to parse the fragment, and SAX
does not support parsing fragments. Specifically, the expat parser
will complain about the ill-formedness of the document.

If you absolutely need to make this work, then you can use the sgmlop
driver, which performs less error checking. Unfortunately, FromXml*
does not support an application-provided driver, so your only solution
at the moment is to set the environment variable PY_SAX_PARSER to
xml.sax.drivers.drv_sgmlop. With that setting, my program above
creates a DocumentFragment.

Please note that this is abusing defects in sgmlop, which should
detect errors in the document more reliably. I'm surprised this worked
with PyXML 0.5.

Regards,
Martin