nu.staldal.xtree
Class SequentialTreeBuilder

java.lang.Object
  extended by nu.staldal.xtree.SequentialTreeBuilder
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.ErrorHandler

public class SequentialTreeBuilder
extends java.lang.Object
implements org.xml.sax.ContentHandler, org.xml.sax.ErrorHandler

Build a list of XTree:s from a SAX2 event stream, or by parsing an XML document.

Useful to process a large document sequentially, without need to store the whole document in memory at the same time.

The SequentialTreeBuilder ensures that the tree will not have two adjacent Text nodes.


Field Summary
static boolean DEBUG
           
 
Constructor Summary
SequentialTreeBuilder(ElementHandler handler)
          Constructs a SequentialTreeBuilder, ready to receive SAX events.
SequentialTreeBuilder(ElementHandler handler, java.net.URL base)
          Constructs a SequentialTreeBuilder, ready to receive SAX events.
 
Method Summary
 void characters(char[] ch, int start, int length)
           
 void endDocument()
           
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
           
 void endPrefixMapping(java.lang.String prefix)
           
 void error(org.xml.sax.SAXParseException e)
           
 void fatalError(org.xml.sax.SAXParseException e)
           
 Element getRootElement()
          Obtain the root Element
 void ignorableWhitespace(char[] ch, int start, int length)
           
static Element parseXMLSequential(org.xml.sax.InputSource xmlInput, boolean validateDTD, ElementHandler handler)
          Parse an XML document into a list of XTree:s, one for each element under the root.
 void processingInstruction(java.lang.String target, java.lang.String data)
           
 void setDocumentLocator(org.xml.sax.Locator locator)
           
 void skippedEntity(java.lang.String name)
           
 void startDocument()
           
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
           
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
           
 void warning(org.xml.sax.SAXParseException e)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

public static final boolean DEBUG
See Also:
Constant Field Values
Constructor Detail

SequentialTreeBuilder

public SequentialTreeBuilder(ElementHandler handler)
Constructs a SequentialTreeBuilder, ready to receive SAX events. Will not support xml:base.

Parameters:
handler - handler to invoke for each element

SequentialTreeBuilder

public SequentialTreeBuilder(ElementHandler handler,
                             java.net.URL base)
Constructs a SequentialTreeBuilder, ready to receive SAX events.

Parameters:
handler - handler to invoke for each element
base - base URL for the document, to support xml:base.
Method Detail

parseXMLSequential

public static Element parseXMLSequential(org.xml.sax.InputSource xmlInput,
                                         boolean validateDTD,
                                         ElementHandler handler)
                                  throws org.xml.sax.SAXParseException,
                                         org.xml.sax.SAXException,
                                         java.io.IOException
Parse an XML document into a list of XTree:s, one for each element under the root. Uses JAXP to find a parser. Will not support xml:base.

Parameters:
xmlInput - the input to parse
validateDTD - validate using DTD
handler - handler to invoke for each element
Returns:
the root element (without any children)
Throws:
org.xml.sax.SAXParseException - if the XML data is not valid
org.xml.sax.SAXException - if any other error occurs while parsing the XML data
java.io.IOException - if there was some I/O error while reading the input.

getRootElement

public Element getRootElement()
                       throws java.lang.IllegalStateException
Obtain the root Element

Throws:
java.lang.IllegalStateException - if the SAX events received so far doesn't constitues a well-formed XML document.

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
Specified by:
startDocument in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
Specified by:
endDocument in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Specified by:
startElement in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
Specified by:
endElement in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
Specified by:
characters in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
Throws:
org.xml.sax.SAXException

fatalError

public void fatalError(org.xml.sax.SAXParseException e)
                throws org.xml.sax.SAXParseException
Specified by:
fatalError in interface org.xml.sax.ErrorHandler
Throws:
org.xml.sax.SAXParseException

error

public void error(org.xml.sax.SAXParseException e)
           throws org.xml.sax.SAXParseException
Specified by:
error in interface org.xml.sax.ErrorHandler
Throws:
org.xml.sax.SAXParseException

warning

public void warning(org.xml.sax.SAXParseException e)
Specified by:
warning in interface org.xml.sax.ErrorHandler