Class AttributeCollectionImpl
- java.lang.Object
-
- net.sf.saxon.tree.util.AttributeCollectionImpl
-
- All Implemented Interfaces:
AttributeCollection
,org.xml.sax.Attributes
public class AttributeCollectionImpl extends java.lang.Object implements org.xml.sax.Attributes, AttributeCollection
AttributeCollectionImpl is an implementation of both the SAX2 interface Attributes and the Saxon equivalent AttributeCollection.As well as providing the information required by the SAX2 interface, an AttributeCollection can hold type information (as needed to support the JAXP 1.3
ValidatorHandler
interface), and location information for debugging. The location information is used in the case of attributes on a result tree to identify the location in the query or stylesheet from which they were generated.
-
-
Field Summary
Fields Modifier and Type Field Description static AttributeCollectionImpl
EMPTY_ATTRIBUTE_COLLECTION
-
Constructor Summary
Constructors Constructor Description AttributeCollectionImpl(Configuration config)
Create an empty attribute list.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addAttribute(NodeName nodeName, SimpleType type, java.lang.String value, int locationId, int properties)
Add an attribute to an attribute list.void
clear()
Clear the attribute list.void
compact()
Compact the attribute list to avoid wasting memorystatic AttributeCollectionImpl
copy(AttributeCollectionImpl atts)
Create an attribute list as a copy of an existing attribute listint
findByNodeName(NodeName nodeName)
Find an attribute by fingerprintint
getIndex(java.lang.String qname)
Get the index of an attribute, from its lexical QNameint
getIndex(java.lang.String uri, java.lang.String localname)
Get the index of an attribute (by name).int
getIndexByFingerprint(int fingerprint)
Get the index, given the fingerprint.int
getLength()
Return the number of attributes in the list.int
getLineNumber(int index)
Get the line number part of the location of an attribute, at a given index.java.lang.String
getLocalName(int index)
Get the local name of an attribute (by position).int
getLocationId(int index)
Get the locationID of an attribute (by position)int
getNameCode(int index)
Get the namecode of an attribute (by position).NodeName
getNodeName(int index)
Get the node name of an attribute (by position).java.lang.String
getPrefix(int index)
Get the prefix of the name of an attribute (by position).int
getProperties(int index)
Get the properties of an attribute (by position)java.lang.String
getQName(int index)
Get the lexical QName of an attribute (by position).java.lang.String
getSystemId(int index)
Get the systemId part of the location of an attribute, at a given index.java.lang.String
getType(int index)
Get the type of an attribute (by position).java.lang.String
getType(java.lang.String name)
Get the type of an attribute (by lexical QName).java.lang.String
getType(java.lang.String uri, java.lang.String localname)
Get the type of an attribute (by name).SimpleType
getTypeAnnotation(int index)
Get the type of an attribute (by position).java.lang.String
getURI(int index)
Get the namespace URI of an attribute (by position).java.lang.String
getValue(int index)
Get the value of an attribute (by position).java.lang.String
getValue(java.lang.String name)
Get the value of an attribute (by lexnical QName).java.lang.String
getValue(java.lang.String uri, java.lang.String localname)
Get the value of an attribute (by name).java.lang.String
getValueByFingerprint(int fingerprint)
Get the attribute value using its fingerprintboolean
isDeleted(int index)
Test whether the attribute at a given index has been deletedboolean
isId(int index)
Determine whether a given attribute has the is-ID property setboolean
isIdref(int index)
Determine whether a given attribute has the is-idref property setvoid
removeAttribute(int index)
Delete the attribute at a given index position.void
renameAttribute(int index, NodeName newName)
Rename an attributevoid
replaceAttribute(int index, java.lang.CharSequence newValue)
Replace the value of an attributevoid
setAttribute(int index, NodeName nodeName, SimpleType type, java.lang.String value, int locationId, int properties)
Set (overwrite) an attribute in the attribute list.void
setLocationProvider(LocationProvider provider)
Set the location provider.void
setTypeAnnotation(int index, SimpleType type)
Set the type annotation of an attribute
-
-
-
Field Detail
-
EMPTY_ATTRIBUTE_COLLECTION
public static AttributeCollectionImpl EMPTY_ATTRIBUTE_COLLECTION
-
-
Constructor Detail
-
AttributeCollectionImpl
public AttributeCollectionImpl(Configuration config)
Create an empty attribute list.- Parameters:
config
- the Saxon Configuration
-
-
Method Detail
-
copy
public static AttributeCollectionImpl copy(AttributeCollectionImpl atts)
Create an attribute list as a copy of an existing attribute list- Parameters:
atts
- the existing attribute list to be copied- Returns:
- the copied attribute list. Note that if the original attribute list
is empty, the method returns the singleton object
EMPTY_ATTRIBUTE_COLLECTION
; this case must therefore be handled specially if the returned attribute list is to be modified.
-
setLocationProvider
public void setLocationProvider(LocationProvider provider)
Set the location provider. This must be set if the methods getSystemId() and getLineNumber() are to be used to get location information for an attribute.- Parameters:
provider
- the location provider
-
addAttribute
public void addAttribute(NodeName nodeName, SimpleType type, java.lang.String value, int locationId, int properties)
Add an attribute to an attribute list. The parameters correspond to the parameters of theReceiver.attribute(net.sf.saxon.om.NodeName, net.sf.saxon.type.SimpleType, CharSequence, int, int)
method. There is no check that the name of the attribute is distinct from other attributes already in the collection: this check must be made by the caller.- Parameters:
nodeName
- Object representing the attribute name.type
- The attribute typevalue
- The attribute value (must not be null)locationId
- Identifies the attribute location.properties
- Attribute properties
-
setAttribute
public void setAttribute(int index, NodeName nodeName, SimpleType type, java.lang.String value, int locationId, int properties)
Set (overwrite) an attribute in the attribute list. The parameters correspond to the parameters of theReceiver.attribute(net.sf.saxon.om.NodeName, net.sf.saxon.type.SimpleType, CharSequence, int, int)
method.- Parameters:
index
- Identifies the entry to be replaced. Must be in range (nasty things happen if not)nodeName
- representing the attribute name.type
- The attribute type codevalue
- The attribute value (must not be null)locationId
- Identifies the attribtue location.properties
- Attribute properties
-
clear
public void clear()
Clear the attribute list. This removes the values but doesn't free the memory used. free the memory, use clear() then compact().
-
compact
public void compact()
Compact the attribute list to avoid wasting memory
-
getLength
public int getLength()
Return the number of attributes in the list.- Specified by:
getLength
in interfaceAttributeCollection
- Specified by:
getLength
in interfaceorg.xml.sax.Attributes
- Returns:
- The number of attributes that have been created in this attribute collection. This is the number of slots used in the list, including any slots allocated to attributes that have since been deleted. Such slots are not reused, to preserve attribute identity.
-
getNameCode
public int getNameCode(int index)
Get the namecode of an attribute (by position).- Specified by:
getNameCode
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The display name of the attribute as a string, or null if there is no attribute at that position.
-
getNodeName
public NodeName getNodeName(int index)
Get the node name of an attribute (by position).- Specified by:
getNodeName
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The node name, as a NodeName object, or null if there is no name at this index
-
getTypeAnnotation
public SimpleType getTypeAnnotation(int index)
Get the type of an attribute (by position).- Specified by:
getTypeAnnotation
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The type annotation
-
getLocationId
public int getLocationId(int index)
Get the locationID of an attribute (by position)- Specified by:
getLocationId
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The location identifier of the attribute. This can be supplied
to a
LocationProvider
in order to obtain the actual system identifier and line number of the relevant location
-
getSystemId
public java.lang.String getSystemId(int index)
Get the systemId part of the location of an attribute, at a given index.Attribute location information is not available from a SAX parser, so this method is not useful for getting the location of an attribute in a source document. However, in a Saxon result document, the location information represents the location in the stylesheet of the instruction used to generate this attribute, which is useful for debugging.
- Specified by:
getSystemId
in interfaceAttributeCollection
- Parameters:
index
- the required attribute- Returns:
- the systemId of the location of the attribute
-
getLineNumber
public int getLineNumber(int index)
Get the line number part of the location of an attribute, at a given index.Attribute location information is not available from a SAX parser, so this method is not useful for getting the location of an attribute in a source document. However, in a Saxon result document, the location information represents the location in the stylesheet of the instruction used to generate this attribute, which is useful for debugging.
- Specified by:
getLineNumber
in interfaceAttributeCollection
- Parameters:
index
- the required attribute- Returns:
- the line number of the location of the attribute
-
getProperties
public int getProperties(int index)
Get the properties of an attribute (by position)- Specified by:
getProperties
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The properties of the attribute. This is a set
of bit-settings defined in class
ReceiverOptions
. The most interesting of these is {ReceiverOptions.DEFAULTED_ATTRIBUTE
, which indicates an attribute that was added to an element as a result of schema validation.
-
getPrefix
public java.lang.String getPrefix(int index)
Get the prefix of the name of an attribute (by position).- Specified by:
getPrefix
in interfaceAttributeCollection
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The prefix of the attribute name as a string, or null if there is no attribute at that position. Returns "" for an attribute that has no prefix.
-
getQName
public java.lang.String getQName(int index)
Get the lexical QName of an attribute (by position).- Specified by:
getQName
in interfaceAttributeCollection
- Specified by:
getQName
in interfaceorg.xml.sax.Attributes
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The lexical QName of the attribute as a string, or null if there is no attribute at that position.
-
getLocalName
public java.lang.String getLocalName(int index)
Get the local name of an attribute (by position).- Specified by:
getLocalName
in interfaceAttributeCollection
- Specified by:
getLocalName
in interfaceorg.xml.sax.Attributes
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The local name of the attribute as a string, or null if there is no attribute at that position.
-
getURI
public java.lang.String getURI(int index)
Get the namespace URI of an attribute (by position).- Specified by:
getURI
in interfaceAttributeCollection
- Specified by:
getURI
in interfaceorg.xml.sax.Attributes
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The local name of the attribute as a string, or null if there is no attribute at that position.
-
getType
public java.lang.String getType(int index)
Get the type of an attribute (by position). This is a SAX2 method, so it gets the type name as a DTD attribute type, mapped from the schema type code.- Specified by:
getType
in interfaceorg.xml.sax.Attributes
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The attribute type as a string ("NMTOKEN" for an enumeration, and "CDATA" if no declaration was read), or null if there is no attribute at that position.
-
getType
public java.lang.String getType(java.lang.String uri, java.lang.String localname)
Get the type of an attribute (by name).- Specified by:
getType
in interfaceorg.xml.sax.Attributes
- Parameters:
uri
- The namespace uri of the attribute.localname
- The local name of the attribute.- Returns:
- The index position of the attribute
-
getValue
public java.lang.String getValue(int index)
Get the value of an attribute (by position).- Specified by:
getValue
in interfaceAttributeCollection
- Specified by:
getValue
in interfaceorg.xml.sax.Attributes
- Parameters:
index
- The position of the attribute in the list.- Returns:
- The attribute value as a string, or null if there is no attribute at that position.
-
getValue
public java.lang.String getValue(java.lang.String uri, java.lang.String localname)
Get the value of an attribute (by name).- Specified by:
getValue
in interfaceAttributeCollection
- Specified by:
getValue
in interfaceorg.xml.sax.Attributes
- Parameters:
uri
- The namespace uri of the attribute.localname
- The local name of the attribute.- Returns:
- The index position of the attribute
-
getValueByFingerprint
public java.lang.String getValueByFingerprint(int fingerprint)
Get the attribute value using its fingerprint- Specified by:
getValueByFingerprint
in interfaceAttributeCollection
-
getIndex
public int getIndex(java.lang.String qname)
Get the index of an attribute, from its lexical QName- Specified by:
getIndex
in interfaceorg.xml.sax.Attributes
- Parameters:
qname
- The lexical QName of the attribute. The prefix must match.- Returns:
- The index position of the attribute
-
getIndex
public int getIndex(java.lang.String uri, java.lang.String localname)
Get the index of an attribute (by name).- Specified by:
getIndex
in interfaceAttributeCollection
- Specified by:
getIndex
in interfaceorg.xml.sax.Attributes
- Parameters:
uri
- The namespace uri of the attribute.localname
- The local name of the attribute.- Returns:
- The index position of the attribute
-
getIndexByFingerprint
public int getIndexByFingerprint(int fingerprint)
Get the index, given the fingerprint. Return -1 if not found.- Specified by:
getIndexByFingerprint
in interfaceAttributeCollection
-
getType
public java.lang.String getType(java.lang.String name)
Get the type of an attribute (by lexical QName).- Specified by:
getType
in interfaceorg.xml.sax.Attributes
- Parameters:
name
- The lexical QName of the attribute.- Returns:
- The attribute type as a string (e.g. "NMTOKEN", or "CDATA" if no declaration was read).
-
getValue
public java.lang.String getValue(java.lang.String name)
Get the value of an attribute (by lexnical QName).- Specified by:
getValue
in interfaceorg.xml.sax.Attributes
- Parameters:
name
- The attribute name (a lexical QName). The prefix must match the prefix originally used. This method is defined in SAX, but is not recommended except where the prefix is null.
-
findByNodeName
public int findByNodeName(NodeName nodeName)
Find an attribute by fingerprint- Parameters:
nodeName
- the name of the required attribute- Returns:
- the index of the attribute, or -1 if absent
-
isId
public boolean isId(int index)
Determine whether a given attribute has the is-ID property set- Specified by:
isId
in interfaceAttributeCollection
-
isIdref
public boolean isIdref(int index)
Determine whether a given attribute has the is-idref property set- Specified by:
isIdref
in interfaceAttributeCollection
-
removeAttribute
public void removeAttribute(int index)
Delete the attribute at a given index position. Note that the index position will not be reused, to ensure that any new attributes added to the element have a distinct identity. Instead, the slot occupied by the attribute is nilled out.- Parameters:
index
- The index position of the attribute to be removed
-
isDeleted
public boolean isDeleted(int index)
Test whether the attribute at a given index has been deleted- Parameters:
index
- the index position of the (ex-) attribute- Returns:
- true if the attribute has been deleted
-
renameAttribute
public void renameAttribute(int index, NodeName newName)
Rename an attribute- Parameters:
index
- the index position of the attributenewName
- the namecode of the new name
-
replaceAttribute
public void replaceAttribute(int index, java.lang.CharSequence newValue)
Replace the value of an attribute- Parameters:
index
- position of the attributenewValue
- the new string value of the attribute
-
setTypeAnnotation
public void setTypeAnnotation(int index, SimpleType type)
Set the type annotation of an attribute- Parameters:
index
- the index position of the attribute nodetype
- the new type for the attribute
-
-