|
|||||||||
| 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.ContentHandlersetDocumentLocator in class org.xml.sax.helpers.XMLFilterImplpublic 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.ContentHandlerstartElement in class org.xml.sax.helpers.XMLFilterImplorg.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.ContentHandlerendElement in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void startDocument()
throws org.xml.sax.SAXException
startDocument in interface org.xml.sax.ContentHandlerstartDocument in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void endDocument()
throws org.xml.sax.SAXException
endDocument in interface org.xml.sax.ContentHandlerendDocument in class org.xml.sax.helpers.XMLFilterImplorg.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.ContentHandlerstartPrefixMapping in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void endPrefixMapping(java.lang.String prefix)
throws org.xml.sax.SAXException
endPrefixMapping in interface org.xml.sax.ContentHandlerendPrefixMapping in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void characters(char[] ch,
int start,
int length)
throws org.xml.sax.SAXException
characters in interface org.xml.sax.ContentHandlercharacters in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void ignorableWhitespace(char[] ch,
int start,
int length)
throws org.xml.sax.SAXException
ignorableWhitespace in interface org.xml.sax.ContentHandlerignorableWhitespace in class org.xml.sax.helpers.XMLFilterImplorg.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.ContentHandlerprocessingInstruction in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXException
public void skippedEntity(java.lang.String name)
throws org.xml.sax.SAXException
skippedEntity in interface org.xml.sax.ContentHandlerskippedEntity in class org.xml.sax.helpers.XMLFilterImplorg.xml.sax.SAXExceptionprotected 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 | ||||||||