You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by Daniel Barclay <Da...@digitalfocus.com> on 2000/06/12 22:02:21 UTC

bug?: XHTML serialization indentation: missing line break?

XHTMLSerializer doesn't seem to indent right (Xerces 1.1.1).

It generates:

...
<docname>
   <one />
   <two /></docname>

I thought it would generate:

...
<docname>
   <one />
   <two />
</docname>


That is, the code doesn't seem to be generated a line break
before end tags.


Note that XMLSerializer indents as expected (for this simple XML,
at least):

<?xml version="1.0" encoding="UTF-8"?>
<docName>
   <one/>
   <two/>
</docName>

HTMLSerializer also indents symmetrically:

...
<docName>
   <one></one>
   <two></two>
</docName>

(Although one might want:

...
<docName>
   <one>
   </one>
   <two>
   </two>
</docName>

)


Here's my test program (also attached):
----------------------------------------------------------------------
import org.apache.xerces.dom.DOMImplementationImpl;
//import org.apache.xerces.dom.*;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
//import org.w3c.dom.*;

import org.apache.xml.serialize.SerializerFactory;
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.DOMSerializer;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;
//import org.apache.xml.serialize.*;

import java.io.UnsupportedEncodingException;
import java.io.IOException;


public class XercesDOMSerialization
{

    public static void main( String[] args ) 
        throws IOException
    {
        System.err.println();

        DOMImplementation x = DOMImplementationImpl.getDOMImplementation();
        Document doc = x.createDocument( "", "docName", null );
        Element rootElem = doc.getDocumentElement();

        Element newElem1 = doc.createElement( "one" );
        rootElem.appendChild( newElem1 );

        Element newElem2 = doc.createElement( "two" );
        rootElem.appendChild( newElem2 );

        System.err.println();

        OutputFormat fmt = new OutputFormat();
        fmt.setIndenting( true );
        fmt.setIndent( 3 );
        //fmt.setIndent( 2 );
        //fmt.setLineWidth( 60 );


        System.err.println( "========================================" );
        System.err.println( "XML serializer:" );

        SerializerFactory factoryForXML = 
            SerializerFactory.getSerializerFactory( "xml" );
        Serializer serializerForXML = factoryForXML.makeSerializer( fmt );
        serializerForXML.setOutputByteStream( System.err );
        DOMSerializer domSerializerForXML = 
            serializerForXML.asDOMSerializer();
        domSerializerForXML.serialize( doc );


        System.err.println( "========================================" );
        System.err.println( "HTML serializer:" );

        SerializerFactory factoryForHTML = 
            SerializerFactory.getSerializerFactory( "html" );
        Serializer serializerForHTML = factoryForHTML.makeSerializer( fmt );
        serializerForHTML.setOutputByteStream( System.err );
        DOMSerializer domSerializerForHTML = 
            serializerForHTML.asDOMSerializer();
        domSerializerForHTML.serialize( doc );


        System.err.println( "========================================" );
        System.err.println( "XHTML serializer:" );

        SerializerFactory factoryForXHTML = 
            SerializerFactory.getSerializerFactory( "xhtml" );
        Serializer serializerForXHTML = factoryForXHTML.makeSerializer( fmt );
        serializerForXHTML.setOutputByteStream( System.err );
        DOMSerializer domSerializerForXHTML = 
            serializerForXHTML.asDOMSerializer();
        domSerializerForXHTML.serialize( doc );


        System.err.println( "========================================" );
        System.err.println( "Text serializer:" );

        SerializerFactory factoryForText = 
            SerializerFactory.getSerializerFactory( "text" );
        Serializer serializerForText = factoryForText.makeSerializer( fmt );
        serializerForText.setOutputByteStream( System.err );
        DOMSerializer domSerializerForText = 
            serializerForText.asDOMSerializer();
        domSerializerForText.serialize( doc );

        System.err.println( "========================================" );


    } // main( ... ) 


} // class XercesDOMSerialization
----------------------------------------------------------------------

Daniel
-- 
Daniel Barclay
Digital Focus
Daniel.Barclay@digitalfocus.com
-- 
Daniel Barclay
Digital Focus
Daniel.Barclay@digitalfocus.com