|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.xml.sax.helpers.XMLFilterImpl | +--com.elharo.xml.xinclude.XIncludeFilter
This is a SAX filter which resolves all XInclude include elements before passing them on to the client application. Currently this class has the following known deviation from the XInclude specification:
Extensions made by JP and TP:
the URL of the included TEXT document (i.e. if parse='text'
)
can be in one of the following forms (lines are numbered starting at 1):
textfileurl#startLineNumber
will include only the line with startLineNumbertextfileurl#startLineNumber$count
will include count lines beginning from startLineNumbertextfileurl#startLineNumber-endLineNumber
will include all lines
beginning from startLineNumber and ending to (including) line endLineNumbertextfileurl#startLineNumber-
will include all lines
beginning from to the end of filetextfileurl#$countOfLines
or textfileurl#-countOfLines
will include first countOfLines lines
from the fileFurthermore, I would definitely use a new instance of this class for each document you want to process. I doubt it can be used successfully on multiple documents. Furthermore, I can virtually guarantee that this class is not thread safe. You have been warned.
Since this class is not designed to be subclassed, and since I have not yet considered how that might affect the methods herein or what other protected methods might be needed to support subclasses, I have declared this class final. I may remove this restriction later, though the use-case for subclassing is weak. This class is designed to have its functionality extended via a a horizontal chain of filters, not a vertical hierarchy of sub and superclasses.
To use this class:
XIncludeFilter
object with a known base URLXMLReader
object from which the raw document will
be read to the setParent()
method of this object. ContentHandler
object to the
setContentHandler()
method of this object. This is the
object which will receive events from the parsed and included
document.
LexicalHandler
object as the value of this object's
http://xml.org/sax/properties/lexical-handler property.
Also make sure your LexicalHandler
asks this object
for the status of each comment using insideIncludeElement
before doing anything with the comment.
parse()
methode.g.
XIncludeFilter includer = new XIncludeFilter(base);
includer.setParent(parser);
includer.setContentHandler(new SAXXIncluder(System.out));
includer.parse(args[i]);
Field Summary | |
protected static java.lang.String |
term1
the number of the first line to be included is specified in the URL after the term1 String |
protected static java.lang.String |
term2
the number of lines to be included is specified in the URL after the term2 String |
protected static java.lang.String |
term3
the number of the last line to be included is specified in the URL after the term3 String |
static java.lang.String |
XINCLUDE_NAMESPACE
|
Constructor Summary | |
XIncludeFilter()
|
Method Summary | |
void |
characters(char[] ch,
int start,
int length)
|
void |
endDocument()
|
void |
endElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName)
|
void |
endPrefixMapping(java.lang.String prefix)
|
protected int |
getLineBegin(java.lang.String url)
This method reads URL and return the first line to read |
protected int |
getLineCount(java.lang.String url)
This method reads URL and return the amount of line line to read |
void |
ignorableWhitespace(char[] ch,
int start,
int length)
|
boolean |
insideIncludeElement()
This utility method returns true if and only if this reader is currently inside a non-empty include element. |
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 uri,
java.lang.String localName,
java.lang.String qName,
org.xml.sax.Attributes atts)
|
void |
startPrefixMapping(java.lang.String prefix,
java.lang.String uri)
|
Methods inherited from class org.xml.sax.helpers.XMLFilterImpl |
error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, getProperty, notationDecl, parse, parse, resolveEntity, setContentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, setProperty, unparsedEntityDecl, warning |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected static final java.lang.String term1
term1
String
protected static final java.lang.String term2
term2
String
protected static final java.lang.String term3
term3
String
public static final java.lang.String XINCLUDE_NAMESPACE
Constructor Detail |
public XIncludeFilter()
Method Detail |
public void setDocumentLocator(org.xml.sax.Locator locator)
setDocumentLocator
in interface org.xml.sax.ContentHandler
setDocumentLocator
in class org.xml.sax.helpers.XMLFilterImpl
public boolean insideIncludeElement()
This utility method returns true if and only if this reader is currently inside a non-empty include element. (This is not the same as being inside the node set which replaces the include element.) This is primarily needed for comments inside include elements. It must be checked by the actual LexicalHandler to see whether a comment is passed or not.
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException
startElement
in interface org.xml.sax.ContentHandler
startElement
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName) throws org.xml.sax.SAXException
endElement
in interface org.xml.sax.ContentHandler
endElement
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void startDocument() throws org.xml.sax.SAXException
startDocument
in interface org.xml.sax.ContentHandler
startDocument
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void endDocument() throws org.xml.sax.SAXException
endDocument
in interface org.xml.sax.ContentHandler
endDocument
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void startPrefixMapping(java.lang.String prefix, java.lang.String uri) throws org.xml.sax.SAXException
startPrefixMapping
in interface org.xml.sax.ContentHandler
startPrefixMapping
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void endPrefixMapping(java.lang.String prefix) throws org.xml.sax.SAXException
endPrefixMapping
in interface org.xml.sax.ContentHandler
endPrefixMapping
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException
characters
in interface org.xml.sax.ContentHandler
characters
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void ignorableWhitespace(char[] ch, int start, int length) throws org.xml.sax.SAXException
ignorableWhitespace
in interface org.xml.sax.ContentHandler
ignorableWhitespace
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void processingInstruction(java.lang.String target, java.lang.String data) throws org.xml.sax.SAXException
processingInstruction
in interface org.xml.sax.ContentHandler
processingInstruction
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
public void skippedEntity(java.lang.String name) throws org.xml.sax.SAXException
skippedEntity
in interface org.xml.sax.ContentHandler
skippedEntity
in class org.xml.sax.helpers.XMLFilterImpl
org.xml.sax.SAXException
protected int getLineBegin(java.lang.String url)
This method reads URL and return the first line to read
url
- URL of the document that will be read
protected int getLineCount(java.lang.String url)
This method reads URL and return the amount of line line to read
url
- URL of the document that will be read
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |