Package gnu.xml
Class XMLFilter
java.lang.Object
gnu.xml.XMLFilter
- All Implemented Interfaces:
Consumer,PositionConsumer,XConsumer,SourceLocator,Appendable,Consumer<Object>,DoubleConsumer,IntConsumer,LongConsumer,SourceLocator,ContentHandler,DocumentHandler,Locator
public class XMLFilter
extends Object
implements DocumentHandler, ContentHandler, SourceLocator, XConsumer, PositionConsumer
Fixup XML input events.
Handles namespace resolution, and adds "namespace nodes" if needed.
Does various error checking.
This wrapper should be used when creating a NodeTree,
as is done for XQuery node constructor expressions.
Can also be called directly from XMLParser, in which case we use a slightly
lower-level interface where we use char array segments rather than
Strings. This is to avoid duplicate String allocation and interning.
The combination XMLParser+XMLFilter+NodeTree makes for a fast and
compact way to read an XML file into a DOM.
-
Nested Class Summary
Nested classes/interfaces inherited from interface gnu.text.SourceLocator
SourceLocator.Simple -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic final intintprotected intPositive if all output should be ignored.booleanTrue if namespace declarations should be passed through as attributes.protected intTwice the number of active startElement and startDocument calls.The specified target Consumer that accepts the output.protected intValue ofnestingjust before outermost startElement whilestringizingLevel > 0.protected intIfstringizingLevel > 0then stringize rather than copy nodes. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionappend(char c) append(CharSequence csq) append(CharSequence csq, int start, int end) voidbeginEntity(Object baseUri) voidcharacters(char[] ch, int start, int length) protected voidcheckValidComment(char[] chars, int offset, int length) protected booleanvoidcommentFromParser(char[] chars, int start, int length) Process a comment, when called from an XML parser.static StringduplicateAttributeMessage(Symbol attrSymbol, Object elementName) voidemitCharacterReference(int value, char[] name, int start, int length) Process a character entity reference.voidemitDoctypeDecl(char[] buffer, int target, int tlength, int data, int dlength) Process a DOCTYPE declaration.voidProcess the end of a start tag.voidemitEndElement(char[] data, int start, int length) Process an end tag.voidemitEntityReference(char[] name, int start, int length) Process an entity reference.voidemitStartAttribute(char[] data, int start, int count) Process an attribute, with the given attribute name.voidemitStartElement(char[] data, int start, int count) Process a start tag, with the given element name.voidEnd of an attribute or end of an actual parameter.voidvoidvoidendElement(String name) voidendElement(String namespaceURI, String localName, String qName) voidvoidendPrefixMapping(String prefix) voidfindNamespaceBinding(String prefix, String uri, NamespaceBinding oldBindings) Functionally equivalent tonew NamespaceBinding(prefix, uri, oldBindings, but uses "hash consing".intReturn current column number.intColumn (one-origin) of end of range; unknown/unspecified is -1.intLine number (one-origin) of end of range; unknown/unspecified is -1.Normally same as getSystemId.intReturn current line number.intColumn (one-origin) of start of range; unknown/unspecified is -1.intLine number (one-origin) of start of range; unknown/unspecified is -1.voidignorableWhitespace(char[] ch, int start, int length) booleanignoring()True if consumer is ignoring rest of element.booleanTrue if position is unlikely to change.voidgnu.xml.MappingInfolookupNamespaceBinding(String prefix, char[] uriChars, int uriStart, int uriLength, int uriHash, NamespaceBinding oldBindings) Return a MappingInfo containing a match namespaces.voidprocessingInstruction(String target, String data) voidprocessingInstructionFromParser(char[] buffer, int tstart, int tlength, int dstart, int dlength) Process a processing instruction.voidsetDocumentLocator(Locator locator) voidsetMessages(SourceMessages messages) voidsetSourceLocator(gnu.kawa.io.InPort in) voidsetSourceLocator(SourceLocator locator) voidskippedEntity(String name) voidstartAttribute(Object attrType) Write a attribute for the current element.voidvoidstartElement(Object type) voidstartElement(String namespaceURI, String localName, String qName, Attributes atts) voidstartElement(String name, AttributeList atts) protected voidvoidstartPrefixMapping(String prefix, String uri) voidtextFromParser(char[] data, int start, int length) voidwrite(char[] data, int start, int length) Process raw text.voidwrite(int v) voidwrite(CharSequence str, int start, int length) voidvoidwriteBoolean(boolean v) voidwriteCDATA(char[] data, int start, int length) Process a CDATA section.voidwriteComment(char[] chars, int start, int length) Process a comment.voidwriteDocumentUri(Object uri) voidwriteDouble(double v) voidwriteFloat(float v) voidwriteInt(int v) protected voidvoidwriteLong(long v) voidIf v is a node, make a copy of it.voidwritePosition(AbstractSequence seq, int ipos) Consume a single position pair.voidwritePosition(SeqPosition position) Consume node at current position.voidwriteProcessingInstruction(String target, char[] content, int offset, int length) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.xml.sax.ContentHandler
declarationMethods inherited from interface java.util.function.DoubleConsumer
andThenMethods inherited from interface java.util.function.IntConsumer
andThenMethods inherited from interface java.util.function.LongConsumer
andThen
-
Field Details
-
out
The specified target Consumer that accepts the output. In contrast, base may be either==outor==tlist. -
COPY_NAMESPACES_PRESERVE
public static final int COPY_NAMESPACES_PRESERVE- See Also:
-
COPY_NAMESPACES_INHERIT
public static final int COPY_NAMESPACES_INHERIT- See Also:
-
copyNamespacesMode
public transient int copyNamespacesMode -
COPY_NAMESPACES_MASK
public static final int COPY_NAMESPACES_MASK- See Also:
-
nesting
protected int nestingTwice the number of active startElement and startDocument calls. -
stringizingLevel
protected int stringizingLevelIfstringizingLevel > 0then stringize rather than copy nodes. It counts the number of nested startAttributes that are active. (In the future it should also count begun comment and processing-instruction constructors, when those support nesting.) -
stringizingElementNesting
protected int stringizingElementNestingValue ofnestingjust before outermost startElement whilestringizingLevel > 0. I.e. if we're nested inside a element nested inside an attribute thenstringizingElementNesting >= 0, otherwisestringizingElementNesting == -1. -
ignoringLevel
protected int ignoringLevelPositive if all output should be ignored. This happens if we're inside an attribute value inside an element which is stringized because it is in turn inside an outer attribute. Phew. It gets incremented by nested attributes so we can tell when to stop. -
namespacePrefixes
public boolean namespacePrefixesTrue if namespace declarations should be passed through as attributes. Like SAX2's http://xml.org/features/namespace-prefixes.
-
-
Constructor Details
-
XMLFilter
-
-
Method Details
-
setSourceLocator
public void setSourceLocator(gnu.kawa.io.InPort in) -
setSourceLocator
-
setMessages
-
findNamespaceBinding
public NamespaceBinding findNamespaceBinding(String prefix, String uri, NamespaceBinding oldBindings) Functionally equivalent tonew NamespaceBinding(prefix, uri, oldBindings, but uses "hash consing". -
lookupNamespaceBinding
public gnu.xml.MappingInfo lookupNamespaceBinding(String prefix, char[] uriChars, int uriStart, int uriLength, int uriHash, NamespaceBinding oldBindings) Return a MappingInfo containing a match namespaces. Specifically, return aMappingInfo infois such thatinfo.namespacesis equal tonew NamespaceBinding(prefix, uri, oldBindings), whereuriisnew String(uriChars, uriStart, uriLength).intern()). -
endAttribute
public void endAttribute()Description copied from interface:ConsumerEnd of an attribute or end of an actual parameter. The former use matches a startAttribute; the latter may not, and can be used to separate parameters in a parameter list. This double duty suggsts the method should at least be re-named.- Specified by:
endAttributein interfaceConsumer
-
checkWriteAtomic
protected boolean checkWriteAtomic() -
write
public void write(int v) -
writeBoolean
public void writeBoolean(boolean v) - Specified by:
writeBooleanin interfaceConsumer
-
writeFloat
public void writeFloat(float v) - Specified by:
writeFloatin interfaceConsumer
-
writeDouble
public void writeDouble(double v) - Specified by:
writeDoublein interfaceConsumer
-
writeInt
public void writeInt(int v) -
writeLong
public void writeLong(long v) -
writeDocumentUri
-
writePosition
Description copied from interface:PositionConsumerConsume node at current position. The caller may invalidate or change the position after consume returns, so if the consumer wants to save it, it needs to copy it.- Specified by:
writePositionin interfacePositionConsumer
-
writePosition
Description copied from interface:PositionConsumerConsume a single position pair. This PositionConsumer may assume the sequence does no reference management; i.e. that copyPos is trivial and releasePos is a no-op. If that is not the case, use consume(TreePosition) instead.- Specified by:
writePositionin interfacePositionConsumer
-
writeObject
If v is a node, make a copy of it.- Specified by:
writeObjectin interfaceConsumer
-
write
public void write(char[] data, int start, int length) Process raw text. -
write
-
write
-
linefeedFromParser
public void linefeedFromParser() -
textFromParser
public void textFromParser(char[] data, int start, int length) -
writeJoiner
protected void writeJoiner() -
writeCDATA
public void writeCDATA(char[] data, int start, int length) Process a CDATA section. The data (starting at start for length char). Does not include the delimiters (i.e."<![CDATA["and"]]>"are excluded).- Specified by:
writeCDATAin interfaceXConsumer
-
startElementCommon
protected void startElementCommon() -
emitStartElement
public void emitStartElement(char[] data, int start, int count) Process a start tag, with the given element name. -
startElement
- Specified by:
startElementin interfaceConsumer
-
startAttribute
Description copied from interface:ConsumerWrite a attribute for the current element. This is only allowed immediately after a startElement.- Specified by:
startAttributein interfaceConsumer
-
emitStartAttribute
public void emitStartAttribute(char[] data, int start, int count) Process an attribute, with the given attribute name. The attribute value is given usingwrite. The value is terminated by either another emitStartAttribute or an emitEndAttributes. -
emitEndAttributes
public void emitEndAttributes()Process the end of a start tag. There are no more attributes. -
emitEndElement
public void emitEndElement(char[] data, int start, int length) Process an end tag. An abbreviated tag (such as'<br/>') has a name==null. -
endElement
public void endElement()- Specified by:
endElementin interfaceConsumer
-
emitEntityReference
public void emitEntityReference(char[] name, int start, int length) Process an entity reference. The entity name is given. This handles the predefined entities, such as "<" and """. -
emitCharacterReference
public void emitCharacterReference(int value, char[] name, int start, int length) Process a character entity reference. The string encoding of the character (e.g. "xFF" or "255") is given, as well as the character value. -
checkValidComment
protected void checkValidComment(char[] chars, int offset, int length) -
writeComment
public void writeComment(char[] chars, int start, int length) Process a comment. The data (starting at start for length chars). Does not include the delimiters (i.e. "" are excluded).- Specified by:
writeCommentin interfaceXConsumer
-
commentFromParser
public void commentFromParser(char[] chars, int start, int length) Process a comment, when called from an XML parser. The data (starting at start for length chars). Does not include the delimiters (i.e. "" are excluded). -
writeProcessingInstruction
- Specified by:
writeProcessingInstructionin interfaceXConsumer
-
processingInstructionFromParser
public void processingInstructionFromParser(char[] buffer, int tstart, int tlength, int dstart, int dlength) Process a processing instruction. -
startDocument
public void startDocument()- Specified by:
startDocumentin interfaceConsumer- Specified by:
startDocumentin interfaceContentHandler- Specified by:
startDocumentin interfaceDocumentHandler
-
endDocument
public void endDocument()- Specified by:
endDocumentin interfaceConsumer- Specified by:
endDocumentin interfaceContentHandler- Specified by:
endDocumentin interfaceDocumentHandler
-
emitDoctypeDecl
public void emitDoctypeDecl(char[] buffer, int target, int tlength, int data, int dlength) Process a DOCTYPE declaration. -
beginEntity
- Specified by:
beginEntityin interfaceXConsumer
-
endEntity
public void endEntity() -
append
- Specified by:
appendin interfaceAppendable- Specified by:
appendin interfaceConsumer
-
append
- Specified by:
appendin interfaceAppendable- Specified by:
appendin interfaceConsumer
-
append
- Specified by:
appendin interfaceAppendable- Specified by:
appendin interfaceConsumer
-
duplicateAttributeMessage
-
error
-
ignoring
public boolean ignoring()Description copied from interface:ConsumerTrue if consumer is ignoring rest of element. The producer can use this information to skip ahead. -
setDocumentLocator
- Specified by:
setDocumentLocatorin interfaceContentHandler- Specified by:
setDocumentLocatorin interfaceDocumentHandler
-
startElement
- Specified by:
startElementin interfaceContentHandler
-
endElement
- Specified by:
endElementin interfaceContentHandler
-
startElement
- Specified by:
startElementin interfaceDocumentHandler
-
endElement
- Specified by:
endElementin interfaceDocumentHandler- Throws:
SAXException
-
characters
- Specified by:
charactersin interfaceContentHandler- Specified by:
charactersin interfaceDocumentHandler- Throws:
SAXException
-
ignorableWhitespace
- Specified by:
ignorableWhitespacein interfaceContentHandler- Specified by:
ignorableWhitespacein interfaceDocumentHandler- Throws:
SAXException
-
processingInstruction
- Specified by:
processingInstructionin interfaceContentHandler- Specified by:
processingInstructionin interfaceDocumentHandler
-
startPrefixMapping
- Specified by:
startPrefixMappingin interfaceContentHandler
-
endPrefixMapping
- Specified by:
endPrefixMappingin interfaceContentHandler
-
skippedEntity
- Specified by:
skippedEntityin interfaceContentHandler
-
getPublicId
- Specified by:
getPublicIdin interfaceLocator- Specified by:
getPublicIdin interfaceSourceLocator- Specified by:
getPublicIdin interfaceSourceLocator
-
getSystemId
- Specified by:
getSystemIdin interfaceLocator- Specified by:
getSystemIdin interfaceSourceLocator- Specified by:
getSystemIdin interfaceSourceLocator
-
getFileName
Description copied from interface:SourceLocatorNormally same as getSystemId.- Specified by:
getFileNamein interfaceSourceLocator
-
getLineNumber
public int getLineNumber()Description copied from interface:SourceLocatorReturn current line number. Normally the same asgetStartLine(). The "first" line is line 1; unknown is -1.- Specified by:
getLineNumberin interfaceLocator- Specified by:
getLineNumberin interfaceSourceLocator- Specified by:
getLineNumberin interfaceSourceLocator
-
getColumnNumber
public int getColumnNumber()Description copied from interface:SourceLocatorReturn current column number. Normally the same asgetStartColumn(). The "first" column is column 1; unknown is -1.- Specified by:
getColumnNumberin interfaceLocator- Specified by:
getColumnNumberin interfaceSourceLocator- Specified by:
getColumnNumberin interfaceSourceLocator
-
getStartLine
public int getStartLine()Description copied from interface:SourceLocatorLine number (one-origin) of start of range; unknown/unspecified is -1.- Specified by:
getStartLinein interfaceSourceLocator
-
getStartColumn
public int getStartColumn()Description copied from interface:SourceLocatorColumn (one-origin) of start of range; unknown/unspecified is -1.- Specified by:
getStartColumnin interfaceSourceLocator
-
getEndLine
public int getEndLine()Description copied from interface:SourceLocatorLine number (one-origin) of end of range; unknown/unspecified is -1.- Specified by:
getEndLinein interfaceSourceLocator
-
getEndColumn
public int getEndColumn()Description copied from interface:SourceLocatorColumn (one-origin) of end of range; unknown/unspecified is -1.- Specified by:
getEndColumnin interfaceSourceLocator
-
isStableSourceLocation
public boolean isStableSourceLocation()Description copied from interface:SourceLocatorTrue if position is unlikely to change. True for an expression but not an input file.- Specified by:
isStableSourceLocationin interfaceSourceLocator
-