Package org.custommonkey.xmlunit
Class TolerantSaxDocumentBuilder
- java.lang.Object
-
- org.xml.sax.helpers.DefaultHandler
-
- org.custommonkey.xmlunit.TolerantSaxDocumentBuilder
-
- All Implemented Interfaces:
org.xml.sax.ContentHandler,org.xml.sax.DTDHandler,org.xml.sax.EntityResolver,org.xml.sax.ErrorHandler,org.xml.sax.ext.LexicalHandler
public class TolerantSaxDocumentBuilder extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ext.LexicalHandlerUses Sax events from theContentHandlerandLexicalHandlerinterfaces to build a DOM document in a tolerant fashion -- it can cope with start tags without end tags, and end tags without start tags for example. Although this subverts the idea of XML being well-formed, it is intended for use with HTML pages so that they can be transformed into DOM trees, without being XHTML to start with. Note that this class currently does not handle entity, DTD or CDATA tags.
-
-
Field Summary
Fields Modifier and Type Field Description private org.w3c.dom.DocumentcurrentDocumentprivate org.w3c.dom.ElementcurrentElementprivate javax.xml.parsers.DocumentBuilderdocumentBuilderprivate java.lang.StringBuildertraceBuilder
-
Constructor Summary
Constructors Constructor Description TolerantSaxDocumentBuilder(javax.xml.parsers.DocumentBuilder documentBuilder)Constructor for specific JAXP parser
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidappendNode(org.w3c.dom.Node appendNode)Append a node to the current document or the current element in the documentvoidcharacters(char[] data, int start, int length)ContentHandler method.voidcomment(char[] ch, int start, int length)LexicalHandler methodprivate org.w3c.dom.ElementcreateElement(java.lang.String namespaceURI, java.lang.String qName, org.xml.sax.Attributes attributes)Create a DOM Element for insertion into the current documentvoidendCDATA()Unhandled LexicalHandler methodvoidendDocument()ContentHandler methodvoidendDTD()Unhandled LexicalHandler methodvoidendElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)ContentHandler methodvoidendEntity(java.lang.String name)Unhandled LexicalHandler methodvoidendPrefixMapping(java.lang.String prefix)Unhandled ContentHandler methodorg.w3c.dom.DocumentgetDocument()java.lang.StringgetTrace()voidignorableWhitespace(char[] ch, int start, int length)Unhandled ContentHandler methodprivate static booleanisElementMatching(org.w3c.dom.Element anElement, java.lang.String qname)voidprocessingInstruction(java.lang.String target, java.lang.String data)ContentHandler methodvoidsetDocumentLocator(org.xml.sax.Locator locator)Unhandled ContentHandler methodvoidskippedEntity(java.lang.String name)Unhandled ContentHandler methodvoidstartCDATA()Unhandled LexicalHandler methodvoidstartDocument()ContentHandler methodvoidstartDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)Unhandled LexicalHandler method.voidstartElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)ContentHandler methodvoidstartEntity(java.lang.String name)Unhandled LexicalHandler methodvoidstartPrefixMapping(java.lang.String prefix, java.lang.String uri)Unhandled ContentHandler methodprivate voidtrace(java.lang.String method)Log a handled ContentHandler or LexicalHandler method for tracing / debug purposesprivate voidunhandled(java.lang.String method)Log an unhandled ContentHandler or LexicalHandler methodprivate voidwarn(java.lang.String msg)Log a warning about badly formed markup
-
-
-
Constructor Detail
-
TolerantSaxDocumentBuilder
public TolerantSaxDocumentBuilder(javax.xml.parsers.DocumentBuilder documentBuilder) throws javax.xml.parsers.ParserConfigurationExceptionConstructor for specific JAXP parser- Parameters:
documentBuilder- the JAXP parser to use to construct an empty DOM document that will be built up with SAX calls- Throws:
javax.xml.parsers.ParserConfigurationException
-
-
Method Detail
-
getDocument
public org.w3c.dom.Document getDocument()
- Returns:
- the Document built up through the Sax calls
-
getTrace
public java.lang.String getTrace()
- Returns:
- the trace of Sax calls that were used to build up the Document
-
startDocument
public void startDocument() throws org.xml.sax.SAXExceptionContentHandler method- Specified by:
startDocumentin interfaceorg.xml.sax.ContentHandler- Overrides:
startDocumentin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
endDocument
public void endDocument() throws org.xml.sax.SAXExceptionContentHandler method- Specified by:
endDocumentin interfaceorg.xml.sax.ContentHandler- Overrides:
endDocumentin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
characters
public void characters(char[] data, int start, int length)ContentHandler method.- Specified by:
charactersin interfaceorg.xml.sax.ContentHandler- Overrides:
charactersin classorg.xml.sax.helpers.DefaultHandler
-
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.SAXExceptionContentHandler method- Specified by:
startElementin interfaceorg.xml.sax.ContentHandler- Overrides:
startElementin classorg.xml.sax.helpers.DefaultHandler- 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.SAXExceptionContentHandler method- Specified by:
endElementin interfaceorg.xml.sax.ContentHandler- Overrides:
endElementin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
isElementMatching
private static boolean isElementMatching(org.w3c.dom.Element anElement, java.lang.String qname)
-
endPrefixMapping
public void endPrefixMapping(java.lang.String prefix) throws org.xml.sax.SAXExceptionUnhandled ContentHandler method- Specified by:
endPrefixMappingin interfaceorg.xml.sax.ContentHandler- Overrides:
endPrefixMappingin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
ignorableWhitespace
public void ignorableWhitespace(char[] ch, int start, int length) throws org.xml.sax.SAXExceptionUnhandled ContentHandler method- Specified by:
ignorableWhitespacein interfaceorg.xml.sax.ContentHandler- Overrides:
ignorableWhitespacein classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
processingInstruction
public void processingInstruction(java.lang.String target, java.lang.String data) throws org.xml.sax.SAXExceptionContentHandler method- Specified by:
processingInstructionin interfaceorg.xml.sax.ContentHandler- Overrides:
processingInstructionin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
setDocumentLocator
public void setDocumentLocator(org.xml.sax.Locator locator)
Unhandled ContentHandler method- Specified by:
setDocumentLocatorin interfaceorg.xml.sax.ContentHandler- Overrides:
setDocumentLocatorin classorg.xml.sax.helpers.DefaultHandler
-
skippedEntity
public void skippedEntity(java.lang.String name) throws org.xml.sax.SAXExceptionUnhandled ContentHandler method- Specified by:
skippedEntityin interfaceorg.xml.sax.ContentHandler- Overrides:
skippedEntityin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
startPrefixMapping
public void startPrefixMapping(java.lang.String prefix, java.lang.String uri) throws org.xml.sax.SAXExceptionUnhandled ContentHandler method- Specified by:
startPrefixMappingin interfaceorg.xml.sax.ContentHandler- Overrides:
startPrefixMappingin classorg.xml.sax.helpers.DefaultHandler- Throws:
org.xml.sax.SAXException
-
startDTD
public void startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method. DOM currently doesn't allow DTD to be retrofitted onto a Document.- Specified by:
startDTDin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
endDTD
public void endDTD() throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method- Specified by:
endDTDin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
startEntity
public void startEntity(java.lang.String name) throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method- Specified by:
startEntityin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
endEntity
public void endEntity(java.lang.String name) throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method- Specified by:
endEntityin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
startCDATA
public void startCDATA() throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method- Specified by:
startCDATAin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
endCDATA
public void endCDATA() throws org.xml.sax.SAXExceptionUnhandled LexicalHandler method- Specified by:
endCDATAin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
comment
public void comment(char[] ch, int start, int length) throws org.xml.sax.SAXExceptionLexicalHandler method- Specified by:
commentin interfaceorg.xml.sax.ext.LexicalHandler- Throws:
org.xml.sax.SAXException
-
unhandled
private void unhandled(java.lang.String method)
Log an unhandled ContentHandler or LexicalHandler method- Parameters:
method-
-
warn
private void warn(java.lang.String msg)
Log a warning about badly formed markup- Parameters:
msg-
-
trace
private void trace(java.lang.String method)
Log a handled ContentHandler or LexicalHandler method for tracing / debug purposes- Parameters:
method-
-
createElement
private org.w3c.dom.Element createElement(java.lang.String namespaceURI, java.lang.String qName, org.xml.sax.Attributes attributes)Create a DOM Element for insertion into the current document- Parameters:
namespaceURI-qName-attributes-- Returns:
- the created Element
-
appendNode
private void appendNode(org.w3c.dom.Node appendNode)
Append a node to the current document or the current element in the document- Parameters:
appendNode-
-
-