[XML-SIG] DOM normalize() broken? entity refs lost?

A.M. Kuchling akuchlin@cnri.reston.va.us
Tue, 27 Apr 1999 22:41:53 -0400


Jeff.Johnson@icn.siemens.com writes:
 > XmlWriter does not define .doOtherNode()
 > so nothing gets written.  

	Eek! You're right.  Try this patch:

Index: writer.py
===================================================================
RCS file: /home/cvsroot/xml/dom/writer.py,v
retrieving revision 1.8
diff -C2 -r1.8 writer.py
*** writer.py	1999/04/08 00:14:29	1.8
--- writer.py	1999/04/28 02:29:42
***************
*** 119,123 ****
          self.stream.write(node.toxml())
  
! 
  class XmlLineariser(XmlWriter):
  
--- 119,125 ----
          self.stream.write(node.toxml())
  
!     def doOtherNode(self, node):
!         self.stream.write( node.toxml() )
!         
  class XmlLineariser(XmlWriter):
  
 > <P>Text on multiple
 > lines and with extra white         space in the
 > raw HTML doesn't change when dom.get_documentElement().normalize()

	Careful; that isn't what normalize() does.  Add another Text
node as a child of the TITLE element, to produce two Text nodes text
to each other.  dom.dump() will then output:

<DOM Document; root=<Element 'HTML'> >
 ...
   <Element 'TITLE'>
    <Text node 'test'>
    <Text node 'ADDED TEXT'>
   <Text node '\012'>

After calling normalize:
<DOM Document; root=<Element 'HTML'> >
 ...
   <Element 'TITLE'>
    <Text node 'testADDED TEXT'>
   <Text node '\012'>

See how the two text nodes have been merged?  It doesn't do anything
about whitespace.

To strip out whitespace, look at strip_whitespace or
collapse_whitespace in xml.dom.utils; after collapse_whitespace(dom,
WS_INTERNAL), runs of whitespace are collapsed down to a single space.

-- 
A.M. Kuchling			http://starship.python.net/crew/amk/
Guards! Guards! Stop this madman! He's turning everyone into monkeys!
    -- A sudden intrusion, in ZOT! #1