john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

XMLWriter

package net.kittyandbear.xml;
//2012-03-18  johnpfeiffer  needs a more abstract way of dealing with nested nodes

/*
  Warning: Stax xml writing can create malformed or invalid xml
  Namespaces provide more explicit context than just the hierarchy, the default namespace below is the xml namespace
  tag defined as html, so every tag without a prefix (head,body) is really html:head and html:body

  <?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">
    <!Comments in xml look like this>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title> web page title </title>
  </head>
  <body>
    <p> <a href="http://example.org/"> example.org </a> </p>
  </body>
</html>

 */

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class XMLWriter
{
    //should be in a separate file utility class
    FileOutputStream getFileOutputStream( String pathAndFilename )
    {
        FileOutputStream fo = null;
        try{
            fo = new FileOutputStream( pathAndFilename );
        }catch( FileNotFoundException fnfe )
        {   System.out.println( "Unable to open file for writing: " + pathAndFilename );
        }
        return fo;
    }

    void streamGenerated( OutputStream out )
    {
        XMLOutputFactory factory = null;
        XMLStreamWriter xsw = null;

        try{
          factory = XMLOutputFactory.newInstance();
          xsw = factory.createXMLStreamWriter( out );

          xsw.writeStartDocument( "UTF-8" , "1.1" );
          xsw.writeDTD( "\n" );
            xsw.writeStartElement( "root" );
                xsw.writeDTD( "\n" );
                xsw.writeDTD( "\t" );
                xsw.writeStartElement( "user" );
                xsw.writeAttribute( "username" , "myusername" );
                xsw.writeAttribute( "password" , "mypassword" );
            xsw.writeEndElement();
            xsw.writeDTD( "\n" );
            xsw.writeDTD( "\t" );
            xsw.writeStartElement( "server" );
                xsw.writeAttribute( "host" , "myipaddress" );
                xsw.writeAttribute( "password" , "mypassword" );
            xsw.writeEndElement();
            xsw.writeDTD( "\n" );
          xsw.writeEndDocument();
          xsw.writeDTD( "\n" );
            xsw.flush();
            xsw.close();

        }catch( Exception e )
        {       e.printStackTrace();
        }
    }

    void factoryGenerated( OutputStream out )
    {
        XMLEventWriter writer = initializeXMLEventWriter( out );
        XMLEventFactory factory = XMLEventFactory.newInstance();
        XMLEvent newline = factory.createDTD( "\n" );
        XMLEvent tab = factory.createDTD( "\t" );
        XMLElementAttribute attribute = null;

        try{
            StartDocument startDocument = factory.createStartDocument( "UTF-8" , "1.1" );
            writer.add( startDocument );
            writer.add( newline );
            startNode( factory , writer , "root" );
            writer.add( newline );

                attribute = new XMLElementAttribute( "username" , "myusername" );
                attribute.add( "password" , "mypassword" );
                writer.add( tab );
                startNode( factory , writer , "user" , attribute );
                finishNode( factory , writer , "user" );
                writer.add( newline );

                attribute = new XMLElementAttribute( "host" , "myipaddress" );
                attribute.add( "password" , "mypassword" );
                writer.add( tab );
                startNode( factory , writer , "server" , attribute );
                finishNode( factory , writer , "server" );
                writer.add( newline );

            finishNode( factory , writer , "root" );

            writer.add( factory.createEndDocument() );
            writer.close();

        }catch( XMLStreamException xmlse )
        {       xmlse.printStackTrace();
        }catch( Exception e )
        {   e.printStackTrace();
        }
    }

    private XMLEventWriter initializeXMLEventWriter( OutputStream out )
    {
        XMLEventWriter writer = null;
        try{
            XMLOutputFactory of = XMLOutputFactory.newInstance();
            writer = of.createXMLEventWriter( out );

        }catch( XMLStreamException xmlse )
        {       xmlse.printStackTrace();
        }catch( Exception e )
        {       e.printStackTrace();
        }

        return writer;
    }

    private void startNode( XMLEventFactory factory, XMLEventWriter writer , String name )
    {
        try{
            StartElement startElement = factory.createStartElement( "" , "" , name );
            writer.add( startElement );

        }catch( NullPointerException npe )
        {       System.err.println( "Factory, writer, or name cannot be null" );
        }catch( XMLStreamException xmlse )
        {       xmlse.printStackTrace();
        }catch( Exception e )
        {       e.printStackTrace();
        }
    }

    void startNode( XMLEventFactory factory, XMLEventWriter writer , String name , XMLElementAttribute attribute )
    {
        StartElement startElement = null;
        try{
        startElement = factory.createStartElement( "" , "" , name , attribute.getAttributeIterator() , attribute.getNamespaceIterator() );
            writer.add( startElement );

        }catch( NullPointerException npe )
        {           System.err.println( "Factory, writer, or name cannot be null" );
        }catch( XMLStreamException xmlse )
        {       xmlse.printStackTrace();
        }catch( Exception e )
        {       e.printStackTrace();
        }
    }

    void finishNode( XMLEventFactory factory, XMLEventWriter writer , String name )
    {
        try{
            EndElement endElement = factory.createEndElement( "" , "" , name );
            writer.add( endElement );

        }catch( NullPointerException npe )
        {           System.err.println( "Factory, writer, or name cannot be null" );
        }catch( XMLStreamException xmlse )
        {       xmlse.printStackTrace();
        }catch( Exception e )
        {       e.printStackTrace();
        }
    }

} //end class

  • « XMLWriter Main
  • FileUtilities »

Published

Mar 18, 2012

Category

java-classes

~445 words

Tags

  • classes 92
  • java 252
  • xml 22
  • xmlwriter 2