Top Description Fields Constructors Methods
org.jdom.input

public Class SAXBuilder

extends Object
Class Inheritance
Imports
java.io.*, java.lang.reflect.*, java.net.*, java.util.*, org.jdom.*, org.xml.sax.*, org.xml.sax.helpers.XMLReaderFactory

Builds a JDOM document from files, streams, readers, URLs, or a SAX org.xml.sax.InputSource instance using a SAX parser. The builder uses a third-party SAX parser (chosen by JAXP by default, or you can choose manually) to handle the parsing duties and simply listens to the SAX events to construct a document. Details which SAX does not provide, such as whitespace outside the root element, are not represented in the JDOM document. Information about SAX can be found at http://www.saxproject.org.

Known issues: Relative paths for a DocType or EntityRef may be converted by the SAX parser into absolute paths.

Authors
Jason Hunter, Brett McLaughlin, Dan Schaffer, Philip Nelson, Alex Rosen
Version
$Revision: 1.93 $, $Date: 2009/07/23 06:26:26 $

Field Summary

Modifier and TypeField and Description
private static final String
private static final String
DEFAULT_SAX_DRIVER

Default parser class to use.

private boolean
expand

Whether expansion of entities should occur

private JDOMFactory
factory

The factory for creating new JDOM objects

private boolean
fastReconfigure

Whether to use fast parser reconfiguration

private HashMap<K, V>
features

User-specified features to be set on the SAX parser

private boolean
ignoringBoundaryWhite

Whether to ignore all whitespace content

private boolean
ignoringWhite

Whether to ignore ignorable whitespace

private HashMap<K, V>
properties

User-specified properties to be set on the SAX parser

private boolean
reuseParser

Whether parser reuse is allowed.

private String
saxDriverClass

Adapter class to use

private DTDHandler
saxDTDHandler

DTDHandler class to use

private EntityResolver
saxEntityResolver

EntityResolver class to use

private ErrorHandler
saxErrorHandler

ErrorHandler class to use

private XMLReader
saxParser

The current SAX parser, if parser reuse has been activated.

private XMLFilter
saxXMLFilter

XMLFilter instance to use

private boolean
skipNextEntityExpandConfig

Whether to to try entity expansion in fast parser reconfiguration

private boolean
skipNextLexicalReportingConfig

Whether to try lexical reporting in fast parser reconfiguration

private boolean
validate

Whether validation should occur

Constructor Summary

AccessConstructor and Description
public
SAXBuilder()

Creates a new SAXBuilder which will attempt to first locate a parser via JAXP, then will try to use a set of default SAX Drivers.

public
SAXBuilder(boolean
boolean indicating if validation should occur.
validate
)

Creates a new SAXBuilder which will attempt to first locate a parser via JAXP, then will try to use a set of default SAX Drivers.

public
SAXBuilder(String
String name of SAX Driver to use for parsing.
saxDriverClass
)

Creates a new SAXBuilder using the specified SAX parser.

public
SAXBuilder(String
String name of SAX Driver to use for parsing.
saxDriverClass
,
boolean
boolean indicating if validation should occur.
validate
)

Creates a new SAXBuilder using the specified SAX parser.

Method Summary

Modifier and TypeMethod and Description
public Document

Returns:

Document resultant Document object
build
(InputSource
InputSource to read from
in
)

This builds a document from the supplied input source.

public Document

Returns:

Document resultant Document object
build
(InputStream
InputStream to read from
in
)

This builds a document from the supplied input stream.

public Document

Returns:

Document resultant Document object
build
(File
File to read from
file
)

This builds a document from the supplied filename.

public Document

Returns:

Document - resultant Document object.
build
(URL
URL to read from.
url
)

This builds a document from the supplied URL.

public Document

Returns:

Document resultant Document object
build
(InputStream
InputStream to read from.
in
,
String
base for resolving relative URIs
systemId
)

This builds a document from the supplied input stream.

public Document

Returns:

Document resultant Document object
build
(Reader
Reader to read from
characterStream
)

This builds a document from the supplied Reader.

public Document

Returns:

Document resultant Document object
build
(Reader
Reader to read from.
characterStream
,
String
base for resolving relative URIs
systemId
)

This builds a document from the supplied Reader.

public Document

Returns:

Document resultant Document object
build
(String
URI for the input
systemId
)

This builds a document from the supplied URI.

protected void
configureContentHandler(SAXHandler
The SAXHandler to configure
contentHandler
)

This configures the SAXHandler that will be used to build the Document.

protected void
configureParser(XMLReader parser, SAXHandler contentHandler)

This configures the XMLReader to be used for reading the XML document.

protected SAXHandler

Returns:

SAXHandler - resultant SAXHandler object.
createContentHandler
()

This creates the SAXHandler that will be used to build the Document.

protected XMLReader

Returns:

XMLReader - resultant XMLReader object.
createParser
()

This creates the XMLReader to be used for reading the XML document.

private static URL

Returns:

URL form of the file, with special characters handled
fileToURL
(File
file object whose path will be converted
file
)

Custom File.toUrl() implementation to handle special chars in file names

public String

Returns:

the driver class assigned in the constructor
getDriverClass
()

Returns the driver class assigned in the constructor, or null if none.

public DTDHandler

Returns:

the DTDHandler assigned
getDTDHandler
()

Returns the DTDHandler assigned, or null if none.

public EntityResolver

Returns:

the EntityResolver assigned
getEntityResolver
()

Returns the EntityResolver assigned, or null if none.

public ErrorHandler

Returns:

the ErrorHandler assigned, or null if none
getErrorHandler
()

Returns the ErrorHandler assigned, or null if none.

public boolean

Returns:

whether entities are being expanded
getExpandEntities
()

Returns whether or not entities are being expanded into normal text content.

public JDOMFactory

Returns:

the factory in use
getFactory
()

Returns the current org.jdom.JDOMFactory in use.

public boolean

Returns:

boolean - whether only whitespace content will be ignored during build.
getIgnoringBoundaryWhitespace
()

Returns whether or not the parser will elminate element content containing only whitespace.

public boolean

Returns:

whether element content whitespace is to be ignored during the build
getIgnoringElementContentWhitespace
()

Returns whether element content whitespace is to be ignored during the build.

public boolean

Returns:

whether the contained SAX parser instance is reused across multiple parses
getReuseParser
()

Returns whether the contained SAX parser instance is reused across multiple parses.

public boolean

Returns:

whether validation is to be performed during the build
getValidation
()

Returns whether validation is to be performed during the build.

public XMLFilter

Returns:

the XMLFilter used during parsing
getXMLFilter
()

Returns the XMLFilter used during parsing, or null if none.

private void
internalSetFeature(XMLReader parser, String feature, boolean value, String displayName)

Tries to set a feature on the parser.

private void
internalSetProperty(XMLReader parser, String property, Object value, String displayName)

Tries to set a property on the parser.

public void
setDTDHandler(DTDHandler
DTDHandler
dtdHandler
)

This sets custom DTDHandler for the Builder.

public void
setEntityResolver(EntityResolver
EntityResolver
entityResolver
)

This sets custom EntityResolver for the Builder.

public void
setErrorHandler(ErrorHandler
ErrorHandler
errorHandler
)

This sets custom ErrorHandler for the Builder.

public void
setExpandEntities(boolean
boolean indicating whether entity expansion should occur.
expand
)

This sets whether or not to expand entities for the builder.

public void
setFactory(JDOMFactory
JDOMFactory to use
factory
)

This sets a custom JDOMFactory for the builder.

public void
setFastReconfigure(boolean
Whether to do a fast reconfiguration of the parser
fastReconfigure
)

Specifies whether this builder will do fast reconfiguration of the underlying SAX parser when reuseParser is true.

public void
setFeature(String
The feature name, which is a fully-qualified URI.
name
,
boolean
The requested state of the feature (true or false).
value
)

This sets a feature on the SAX parser.

private void
setFeaturesAndProperties(XMLReader parser, boolean coreFeatures)

public void
setIgnoringBoundaryWhitespace(boolean
Whether to ignore whitespace-only text noes
ignoringBoundaryWhite
)

Specifies whether or not the parser should elminate boundary whitespace, a term that indicates whitespace-only text between element tags.

public void
setIgnoringElementContentWhitespace(boolean
Whether to ignore ignorable whitespace
ignoringWhite
)

Specifies whether or not the parser should elminate whitespace in element content (sometimes known as "ignorable whitespace") when building the document.

public void
setProperty(String
The property name, which is a fully-qualified URI.
name
,
Object
The requested value for the property.
value
)

This sets a property on the SAX parser.

public void
setReuseParser(boolean
Whether to reuse the SAX parser.
reuseParser
)

Specifies whether this builder shall reuse the same SAX parser when performing subsequent parses or allocate a new parser for each parse.

public void
setValidation(boolean
boolean indicating whether validation should occur.
validate
)

This sets validation for the builder.

public void
setXMLFilter(XMLFilter
the filter to use
xmlFilter
)

This sets a custom org.xml.sax.XMLFilter for the builder.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

CVS_IDback to summary
private static final String CVS_ID
DEFAULT_SAX_DRIVERback to summary
private static final String DEFAULT_SAX_DRIVER

Default parser class to use. This is used when no other parser is given and JAXP isn't available.

expandback to summary
private boolean expand

Whether expansion of entities should occur

factoryback to summary
private JDOMFactory factory

The factory for creating new JDOM objects

fastReconfigureback to summary
private boolean fastReconfigure

Whether to use fast parser reconfiguration

featuresback to summary
private HashMap<K, V> features

User-specified features to be set on the SAX parser

ignoringBoundaryWhiteback to summary
private boolean ignoringBoundaryWhite

Whether to ignore all whitespace content

ignoringWhiteback to summary
private boolean ignoringWhite

Whether to ignore ignorable whitespace

propertiesback to summary
private HashMap<K, V> properties

User-specified properties to be set on the SAX parser

reuseParserback to summary
private boolean reuseParser

Whether parser reuse is allowed.

Default: true

saxDriverClassback to summary
private String saxDriverClass

Adapter class to use

saxDTDHandlerback to summary
private DTDHandler saxDTDHandler

DTDHandler class to use

saxEntityResolverback to summary
private EntityResolver saxEntityResolver

EntityResolver class to use

saxErrorHandlerback to summary
private ErrorHandler saxErrorHandler

ErrorHandler class to use

saxParserback to summary
private XMLReader saxParser

The current SAX parser, if parser reuse has been activated.

saxXMLFilterback to summary
private XMLFilter saxXMLFilter

XMLFilter instance to use

skipNextEntityExpandConfigback to summary
private boolean skipNextEntityExpandConfig

Whether to to try entity expansion in fast parser reconfiguration

skipNextLexicalReportingConfigback to summary
private boolean skipNextLexicalReportingConfig

Whether to try lexical reporting in fast parser reconfiguration

validateback to summary
private boolean validate

Whether validation should occur

Constructor Detail

SAXBuilderback to summary
public SAXBuilder()

Creates a new SAXBuilder which will attempt to first locate a parser via JAXP, then will try to use a set of default SAX Drivers. The underlying parser will not validate.

SAXBuilderback to summary
public SAXBuilder(boolean validate)

Creates a new SAXBuilder which will attempt to first locate a parser via JAXP, then will try to use a set of default SAX Drivers. The underlying parser will validate or not according to the given parameter.

Parameters
validate:boolean

boolean indicating if validation should occur.

SAXBuilderback to summary
public SAXBuilder(String saxDriverClass)

Creates a new SAXBuilder using the specified SAX parser. The underlying parser will not validate.

Parameters
saxDriverClass:String

String name of SAX Driver to use for parsing.

SAXBuilderback to summary
public SAXBuilder(String saxDriverClass, boolean validate)

Creates a new SAXBuilder using the specified SAX parser. The underlying parser will validate or not according to the given parameter.

Parameters
saxDriverClass:String

String name of SAX Driver to use for parsing.

validate:boolean

boolean indicating if validation should occur.

Method Detail

buildback to summary
public Document build(InputSource in) throws JDOMException, IOException

This builds a document from the supplied input source.

Parameters
in:InputSource

InputSource to read from

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
buildback to summary
public Document build(InputStream in) throws JDOMException, IOException

This builds a document from the supplied input stream.

Parameters
in:InputStream

InputStream to read from

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed.
buildback to summary
public Document build(File file) throws JDOMException, IOException

This builds a document from the supplied filename.

Parameters
file:File

File to read from

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
buildback to summary
public Document build(URL url) throws JDOMException, IOException

This builds a document from the supplied URL.

Parameters
url:URL

URL to read from.

Returns:Document

Document - resultant Document object.

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed.
buildback to summary
public Document build(InputStream in, String systemId) throws JDOMException, IOException

This builds a document from the supplied input stream.

Parameters
in:InputStream

InputStream to read from.

systemId:String

base for resolving relative URIs

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
buildback to summary
public Document build(Reader characterStream) throws JDOMException, IOException

This builds a document from the supplied Reader. It's the programmer's responsibility to make sure the reader matches the encoding of the file. It's often easier and safer to use an InputStream rather than a Reader, and to let the parser auto-detect the encoding from the XML declaration.

Parameters
characterStream:Reader

Reader to read from

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
buildback to summary
public Document build(Reader characterStream, String systemId) throws JDOMException, IOException

This builds a document from the supplied Reader. It's the programmer's responsibility to make sure the reader matches the encoding of the file. It's often easier and safer to use an InputStream rather than a Reader, and to let the parser auto-detect the encoding from the XML declaration.

Parameters
characterStream:Reader

Reader to read from.

systemId:String

base for resolving relative URIs

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
buildback to summary
public Document build(String systemId) throws JDOMException, IOException

This builds a document from the supplied URI.

Parameters
systemId:String

URI for the input

Returns:Document

Document resultant Document object

Exceptions
JDOMException:
when errors occur in parsing
IOException:
when an I/O error prevents a document from being fully parsed
configureContentHandlerback to summary
protected void configureContentHandler(SAXHandler contentHandler)

This configures the SAXHandler that will be used to build the Document.

The default implementation simply passes through some configuration settings that were set on the SAXBuilder: setExpandEntities() and setIgnoringElementContentWhitespace().

Parameters
contentHandler:SAXHandler

The SAXHandler to configure

configureParserback to summary
protected void configureParser(XMLReader parser, SAXHandler contentHandler) throws JDOMException

This configures the XMLReader to be used for reading the XML document.

The default implementation sets various options on the given XMLReader, such as validation, DTD resolution, entity handlers, etc., according to the options that were set (e.g. via setEntityResolver) and set various SAX properties and features that are required for JDOM internals. These features may change in future releases, so change this behavior at your own risk.

createContentHandlerback to summary
protected SAXHandler createContentHandler()

This creates the SAXHandler that will be used to build the Document.

Returns:SAXHandler

SAXHandler - resultant SAXHandler object.

createParserback to summary
protected XMLReader createParser() throws JDOMException

This creates the XMLReader to be used for reading the XML document.

The default behavior is to (1) use the saxDriverClass, if it has been set, (2) try to obtain a parser from JAXP, if it is available, and (3) if all else fails, use a hard-coded default parser (currently the Xerces parser). Subclasses may override this method to determine the parser to use in a different way.

Returns:XMLReader

XMLReader - resultant XMLReader object.

fileToURLback to summary
private static URL fileToURL(File file) throws MalformedURLException

Custom File.toUrl() implementation to handle special chars in file names

Parameters
file:File

file object whose path will be converted

Returns:URL

URL form of the file, with special characters handled

Exceptions
MalformedURLException:
if there's a problem constructing a URL
getDriverClassback to summary
public String getDriverClass()

Returns the driver class assigned in the constructor, or null if none.

Returns:String

the driver class assigned in the constructor

getDTDHandlerback to summary
public DTDHandler getDTDHandler()

Returns the DTDHandler assigned, or null if none.

Returns:DTDHandler

the DTDHandler assigned

getEntityResolverback to summary
public EntityResolver getEntityResolver()

Returns the EntityResolver assigned, or null if none.

Returns:EntityResolver

the EntityResolver assigned

getErrorHandlerback to summary
public ErrorHandler getErrorHandler()

Returns the ErrorHandler assigned, or null if none.

Returns:ErrorHandler

the ErrorHandler assigned, or null if none

getExpandEntitiesback to summary
public boolean getExpandEntities()

Returns whether or not entities are being expanded into normal text content.

Returns:boolean

whether entities are being expanded

getFactoryback to summary
public JDOMFactory getFactory()

Returns the current org.jdom.JDOMFactory in use.

Returns:JDOMFactory

the factory in use

getIgnoringBoundaryWhitespaceback to summary
public boolean getIgnoringBoundaryWhitespace()

Returns whether or not the parser will elminate element content containing only whitespace.

Returns:boolean

boolean - whether only whitespace content will be ignored during build.

See Also
setIgnoringBoundaryWhitespace
getIgnoringElementContentWhitespaceback to summary
public boolean getIgnoringElementContentWhitespace()

Returns whether element content whitespace is to be ignored during the build.

Returns:boolean

whether element content whitespace is to be ignored during the build

getReuseParserback to summary
public boolean getReuseParser()

Returns whether the contained SAX parser instance is reused across multiple parses. The default is true.

Returns:boolean

whether the contained SAX parser instance is reused across multiple parses

getValidationback to summary
public boolean getValidation()

Returns whether validation is to be performed during the build.

Returns:boolean

whether validation is to be performed during the build

getXMLFilterback to summary
public XMLFilter getXMLFilter()

Returns the XMLFilter used during parsing, or null if none.

Returns:XMLFilter

the XMLFilter used during parsing

internalSetFeatureback to summary
private void internalSetFeature(XMLReader parser, String feature, boolean value, String displayName) throws JDOMException

Tries to set a feature on the parser. If the feature cannot be set, throws a JDOMException describing the problem.

internalSetPropertyback to summary
private void internalSetProperty(XMLReader parser, String property, Object value, String displayName) throws JDOMException

Tries to set a property on the parser. If the property cannot be set, throws a JDOMException describing the problem.

setDTDHandlerback to summary
public void setDTDHandler(DTDHandler dtdHandler)

This sets custom DTDHandler for the Builder.

Parameters
dtdHandler:DTDHandler

DTDHandler

setEntityResolverback to summary
public void setEntityResolver(EntityResolver entityResolver)

This sets custom EntityResolver for the Builder.

Parameters
entityResolver:EntityResolver

EntityResolver

setErrorHandlerback to summary
public void setErrorHandler(ErrorHandler errorHandler)

This sets custom ErrorHandler for the Builder.

Parameters
errorHandler:ErrorHandler

ErrorHandler

setExpandEntitiesback to summary
public void setExpandEntities(boolean expand)

This sets whether or not to expand entities for the builder. A true means to expand entities as normal content. A false means to leave entities unexpanded as EntityRef objects. The default is true.

When this setting is false, the internal DTD subset is retained; when this setting is true, the internal DTD subset is not retained.

Note that Xerces (at least up to 1.4.4) has a bug where entities in attribute values will be misreported if this flag is turned off, resulting in entities to appear within element content. When turning entity expansion off either avoid entities in attribute values, or use another parser like Crimson. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6111

Parameters
expand:boolean

boolean indicating whether entity expansion should occur.

setFactoryback to summary
public void setFactory(JDOMFactory factory)

This sets a custom JDOMFactory for the builder. Use this to build the tree with your own subclasses of the JDOM classes.

Parameters
factory:JDOMFactory

JDOMFactory to use

setFastReconfigureback to summary
public void setFastReconfigure(boolean fastReconfigure)

Specifies whether this builder will do fast reconfiguration of the underlying SAX parser when reuseParser is true. This improves performance in cases where SAXBuilders are reused and lots of small documents are frequently parsed. This avoids attempting to set features on the SAX parser each time build() is called which result in SaxNotRecognizedExceptions. This should ONLY be set for builders where this specific case is an issue. The default value of this setting is false (no fast reconfiguration). If reuseParser is false, calling this has no effect.

Parameters
fastReconfigure:boolean

Whether to do a fast reconfiguration of the parser

setFeatureback to summary
public void setFeature(String name, boolean value)

This sets a feature on the SAX parser. See the SAX documentation for . more information.

Note

SAXBuilder requires that some particular features of the SAX parser be set up in certain ways for it to work properly. The list of such features may change in the future. Therefore, the use of this method may cause parsing to break, and even if it doesn't break anything today it might break parsing in a future JDOM version, because what JDOM parsers require may change over time. Use with caution.

Parameters
name:String

The feature name, which is a fully-qualified URI.

value:boolean

The requested state of the feature (true or false).

setFeaturesAndPropertiesback to summary
private void setFeaturesAndProperties(XMLReader parser, boolean coreFeatures) throws JDOMException
setIgnoringBoundaryWhitespaceback to summary
public void setIgnoringBoundaryWhitespace(boolean ignoringBoundaryWhite)

Specifies whether or not the parser should elminate boundary whitespace, a term that indicates whitespace-only text between element tags. This feature is a lot like setIgnoringElementContentWhitespace(boolean) but this feature is more aggressive and doesn't require validation be turned on. The setIgnoringElementContentWhitespace(boolean) call impacts the SAX parse process while this method impacts the JDOM build process, so it can be beneficial to turn both on for efficiency. For implementation efficiency, this method actually removes all whitespace-only text() nodes. That can, in some cases (like beteween an element tag and a comment), include whitespace that isn't just boundary whitespace. The default is false.

Parameters
ignoringBoundaryWhite:boolean

Whether to ignore whitespace-only text noes

setIgnoringElementContentWhitespaceback to summary
public void setIgnoringElementContentWhitespace(boolean ignoringWhite)

Specifies whether or not the parser should elminate whitespace in element content (sometimes known as "ignorable whitespace") when building the document. Only whitespace which is contained within element content that has an element only content model will be eliminated (see XML Rec 3.2.1). For this setting to take effect requires that validation be turned on. The default value of this setting is false.

Parameters
ignoringWhite:boolean

Whether to ignore ignorable whitespace

setPropertyback to summary
public void setProperty(String name, Object value)

This sets a property on the SAX parser. See the SAX documentation for more information.

Note

SAXBuilder requires that some particular properties of the SAX parser be set up in certain ways for it to work properly. The list of such properties may change in the future. Therefore, the use of this method may cause parsing to break, and even if it doesn't break anything today it might break parsing in a future JDOM version, because what JDOM parsers require may change over time. Use with caution.

Parameters
name:String

The property name, which is a fully-qualified URI.

value:Object

The requested value for the property.

setReuseParserback to summary
public void setReuseParser(boolean reuseParser)

Specifies whether this builder shall reuse the same SAX parser when performing subsequent parses or allocate a new parser for each parse. The default value of this setting is true (parser reuse).

Note

As SAX parser instances are not thread safe, the parser reuse feature should not be used with SAXBuilder instances shared among threads.

Parameters
reuseParser:boolean

Whether to reuse the SAX parser.

setValidationback to summary
public void setValidation(boolean validate)

This sets validation for the builder.

Parameters
validate:boolean

boolean indicating whether validation should occur.

setXMLFilterback to summary
public void setXMLFilter(XMLFilter xmlFilter)

This sets a custom org.xml.sax.XMLFilter for the builder.

Parameters
xmlFilter:XMLFilter

the filter to use