com.icl.saxon.style

## Class XSLDocument

- java.lang.Object
- - com.icl.saxon.om.AbstractNode
  - - com.icl.saxon.tree.NodeImpl
    - - com.icl.saxon.tree.ElementImpl
      - - com.icl.saxon.tree.ElementWithAttributes
        - - com.icl.saxon.style.StyleElement
          - - com.icl.saxon.style.XSLDocument

- All Implemented Interfaces:
    NodeInfo, javax.xml.transform.dom.DOMLocator, javax.xml.transform.Source, javax.xml.transform.SourceLocator, org.w3c.dom.Element, org.w3c.dom.NamedNodeMap, org.w3c.dom.Node, org.xml.sax.Locator

      public class XSLDocument
      extends StyleElement

  An xsl:document (formerly saxon:output) element in the stylesheet.
  The xsl:document element takes an attribute href="filename". The filename will often contain parameters, e.g. {position()} to ensure that a different file is produced for each element instance.
  There is a further attribute method=xml|html|text which determines the format of the output file (default XML). Alternatively the xsl:document element may take a next-in-chain attribute in which case output is directed to another stylesheet. Any unrecognized namespaced attributes are interepreted as attribute value templates, and their values are added to the output properties, for use by a user-defined Emitter.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `sequence`

    - ### Fields inherited from class com.icl.saxon.style.StyleElement

      `attributeSets, extensionNamespaces, REPORT_ALWAYS, REPORT_IF_INSTANTIATED, REPORT_UNLESS_FORWARDS_COMPATIBLE, reportingCircumstances, staticContext, validationError`

    - ### Fields inherited from class com.icl.saxon.tree.ElementWithAttributes

      `attributeList, namespaceList`

    - ### Fields inherited from class com.icl.saxon.tree.ElementImpl

      `nameCode, root`

    - ### Fields inherited from class com.icl.saxon.tree.NodeImpl

      `emptyArray, index, parent`

    - ### Fields inherited from class com.icl.saxon.om.AbstractNode

      `NODE_LETTER`

    - ### Fields inherited from interface org.w3c.dom.Node

      `ATTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, DOCUMENT_POSITION_PRECEDING, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE`

    - ### Fields inherited from interface com.icl.saxon.om.NodeInfo

      `ATTRIBUTE, COMMENT, ELEMENT, NAMESPACE, NODE, NONE, NUMBER_OF_TYPES, PI, ROOT, TEXT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `XSLDocument()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addChild(NodeImpl node, int index)` Add a child node to this node.
    `void` | `compact(int size)` Compact the space used by this node
    `void` | `copyStringValue(Outputter out)` Copy the string-value of this node to a given outputter
    `void` | `dropChildren()` Drop a branch of the tree.
    `AxisEnumeration` | `enumerateChildren(NodeTest test)` Get an enumeration of the children of this node
    `org.w3c.dom.NodeList` | `getChildNodes()` Return a `NodeList` that contains all children of this node.
    `org.w3c.dom.Node` | `getFirstChild()` Get the first child node of the element
    `org.w3c.dom.Node` | `getLastChild()` Get the last child node of the element
    `java.lang.String` | `getNodeValue()` Get the node value as defined in the DOM.
    `protected NodeImpl` | `getNthChild(int n)` Get the nth child node of the element (numbering from 0)
    `protected long` | `getSequenceNumber()` Get the node sequence number (in document order).
    `java.lang.String` | `getStringValue()` Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.
    `boolean` | `hasChildNodes()` Determine if the node has any children.
    `boolean` | `isInstruction()` Determine whether this node is an instruction.
    `boolean` | `mayContainTemplateBody()` Determine whether this type of element is allowed to contain a template-body
    `void` | `prepareAttributes()` Set the attribute list for the element.
    `protected javax.xml.transform.sax.TransformerHandler` | `prepareNextStylesheet(java.lang.String href, Context context)` Prepare another stylesheet to handle the output of this one
    `void` | `process(Context context)` Process: called to do the real work of this stylesheet element.
    `void` | `removeChild(int index)` Remove node at given index.
    `void` | `renumberChildren()` Renumber the children of a given parent node.
    `protected java.util.Properties` | `updateOutputProperties(java.util.Properties details, Context context)` Evaluate any properties defined as attribute value templates; validate them; and return the values as additions to a set of Properties
    `void` | `useChildrenArray(NodeImpl[] array)` Supply an array to be used for the array of children.
    `void` | `validate()` Check that the element is valid.

    - ### Methods inherited from class com.icl.saxon.style.StyleElement

      `bindVariable, checkEmpty, checkNotTopLevel, checkTopLevel, checkUnknownAttribute, checkWithinTemplate, compileError, compileError, definesExcludedNamespace, definesExtensionElement, doesPostProcessing, fallbackProcessing, findAttributeSets, forwardsCompatibleModeIsEnabled, getContainingStyleSheet, getPrecedence, getPreparedStyleSheet, getPrincipalStyleSheet, getStandardNames, getStyleSheetFunction, getVariableBinding, getVariableNames, getVersion, handleSortKeys, isExcludedNamespace, isExtensionNamespace, isTopLevel, makeAttributeValueTemplate, makeExpression, makePattern, preprocess, processAllAttributes, processAttributes, processAttributeSets, processChildren, processExcludedNamespaces, processExtensionElementAttribute, processVersionAttribute, reportAbsence, setValidationError, styleError, styleError, substituteFor, validateChildren, validateSubtree`

    - ### Methods inherited from class com.icl.saxon.tree.ElementWithAttributes

      `addNamespaceNodes, copy, getAttribute, getAttributeList, getAttributeNode, getAttributeNodeNS, getAttributeNS, getAttributes, getAttributeValue, getAttributeValue, getAttributeValue, getLength, getNamedItem, getNamedItemNS, getNamespaceCodes, getPrefixForURI, getURICodeForPrefix, hasAttribute, hasAttributeNS, hasAttributes, initialise, item, outputNamespaceNodes, removeAttribute, removeAttributeNode, removeAttributeNS, removeNamedItem, removeNamedItemNS, setAttribute, setAttributeNode, setAttributeNodeNS, setAttributeNS, setNamedItem, setNamedItemNS, setNamespaceDeclarations`

    - ### Methods inherited from class com.icl.saxon.tree.ElementImpl

      `copy, generateId, getBaseURI, getDocumentRoot, getLineNumber, getNameCode, getNodeType, getSystemId, makeNameCode, setLineNumber, setNameCode, setSystemId`

    - ### Methods inherited from class com.icl.saxon.tree.NodeImpl

      `compareOrder, getDisplayName, getDocumentElement, getEnumeration, getFingerprint, getLocalName, getNamePool, getNextInDocument, getNextSibling, getOriginatingNode, getParent, getPrefix, getPreviousInDocument, getPreviousSibling, getURI, isSameNodeInfo, removeNode`

    - ### Methods inherited from class com.icl.saxon.om.AbstractNode

      `appendChild, appendData, cloneNode, compareDocumentPosition, createAttribute, createAttributeNS, createCDATASection, createComment, createDocumentFragment, createElement, createElementNS, createEntityReference, createProcessingInstruction, createTextNode, deleteData, disallowUpdate, getColumnNumber, getData, getDoctype, getElementById, getElementsByTagName, getElementsByTagNameNS, getFeature, getImplementation, getName, getNamespaceURI, getNodeName, getOwnerDocument, getOwnerElement, getParentNode, getPublicId, getSchemaTypeInfo, getSpecified, getTagName, getTextContent, getUserData, getValue, getWholeText, importNode, insertBefore, insertData, isDefaultNamespace, isElementContentWhitespace, isEqualNode, isId, isSameNode, isSupported, lookupNamespaceURI, lookupPrefix, normalize, removeChild, replaceChild, replaceData, replaceWholeText, setData, setIdAttribute, setIdAttributeNode, setIdAttributeNS, setNodeValue, setPrefix, setTextContent, setUserData, setValue, splitText, substringData, supports`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.xml.sax.Locator

      `getColumnNumber, getLineNumber, getPublicId, getSystemId`

    - ### Methods inherited from interface org.w3c.dom.Element

      `getElementsByTagName, getElementsByTagNameNS, getSchemaTypeInfo, getTagName, setIdAttribute, setIdAttributeNode, setIdAttributeNS`

    - ### Methods inherited from interface org.w3c.dom.Node

      `appendChild, cloneNode, compareDocumentPosition, getBaseURI, getChildNodes, getFeature, getFirstChild, getLastChild, getLocalName, getNamespaceURI, getNextSibling, getNodeName, getNodeType, getNodeValue, getOwnerDocument, getParentNode, getPrefix, getPreviousSibling, getTextContent, getUserData, hasChildNodes, insertBefore, isDefaultNamespace, isEqualNode, isSameNode, isSupported, lookupNamespaceURI, lookupPrefix, normalize, removeChild, replaceChild, setNodeValue, setPrefix, setTextContent, setUserData`

- - ### Field Detail

    - #### sequence

          protected int sequence

  - ### Constructor Detail

    - #### XSLDocument

          public XSLDocument()

  - ### Method Detail

    - #### isInstruction

          public boolean isInstruction()

      Determine whether this node is an instruction.
      Overrides:
        `isInstruction` in class `StyleElement`
      Returns:
        true - it is an instruction

    - #### mayContainTemplateBody

          public boolean mayContainTemplateBody()

      Determine whether this type of element is allowed to contain a template-body
      Overrides:
        `mayContainTemplateBody` in class `StyleElement`
      Returns:
        true: yes, it may contain a template-body

    - #### prepareAttributes

          public void prepareAttributes()
                                 throws javax.xml.transform.TransformerConfigurationException

      Description copied from class: `StyleElement`
      Set the attribute list for the element. This is called to process the attributes (note the distinction from processAttributes in the superclass). Must be supplied in a subclass
      Throws:
        `javax.xml.transform.TransformerConfigurationException`

    - #### validate

          public void validate()
                        throws javax.xml.transform.TransformerConfigurationException

      Description copied from class: `StyleElement`
      Check that the element is valid. This is called once for each element, after the entire tree has been built. As well as validation, it can perform first-time initialisation. The default implementation does nothing; it is normally overriden in subclasses.
      Overrides:
        `validate` in class `StyleElement`
      Throws:
        `javax.xml.transform.TransformerConfigurationException`

    - #### process

          public void process(Context context)
                       throws javax.xml.transform.TransformerException

      Description copied from class: `StyleElement`
      Process: called to do the real work of this stylesheet element. This method must be implemented in each subclass.
      Specified by:
        `process` in class `StyleElement`
      Parameters:
        `context` - The context in the source XML document, giving access to the current node, the current variables, etc.
      Throws:
        `javax.xml.transform.TransformerException`

    - #### updateOutputProperties

          protected java.util.Properties updateOutputProperties(java.util.Properties details,
                                                    Context context)
                                                         throws javax.xml.transform.TransformerException

      Evaluate any properties defined as attribute value templates; validate them; and return the values as additions to a set of Properties
      Throws:
        `javax.xml.transform.TransformerException`

    - #### prepareNextStylesheet

          protected javax.xml.transform.sax.TransformerHandler prepareNextStylesheet(java.lang.String href,
                                                                         Context context)
                                                                              throws javax.xml.transform.TransformerException

      Prepare another stylesheet to handle the output of this one
      Throws:
        `javax.xml.transform.TransformerException`

    - #### getSequenceNumber

          protected final long getSequenceNumber()

      Get the node sequence number (in document order). Sequence numbers are monotonic but not consecutive. In the current implementation, parent nodes (elements and roots) have a zero least-significant word, while namespaces, attributes, text nodes, comments, and PIs have the top word the same as their owner and the bottom half reflecting their relative position.
      Overrides:
        `getSequenceNumber` in class `NodeImpl`

    - #### hasChildNodes

          public final boolean hasChildNodes()

      Determine if the node has any children.
      Specified by:
        `hasChildNodes` in interface `NodeInfo`
      Specified by:
        `hasChildNodes` in interface `org.w3c.dom.Node`
      Overrides:
        `hasChildNodes` in class `NodeImpl`
      Returns:
        `true` if the node has any children, `false` if the node has no children.

    - #### enumerateChildren

          public final AxisEnumeration enumerateChildren(NodeTest test)

      Get an enumeration of the children of this node

    - #### getFirstChild

          public final org.w3c.dom.Node getFirstChild()

      Get the first child node of the element
      Specified by:
        `getFirstChild` in interface `org.w3c.dom.Node`
      Overrides:
        `getFirstChild` in class `NodeImpl`
      Returns:
        the first child node of the required type, or null if there are no children

    - #### getLastChild

          public final org.w3c.dom.Node getLastChild()

      Get the last child node of the element
      Specified by:
        `getLastChild` in interface `org.w3c.dom.Node`
      Overrides:
        `getLastChild` in class `NodeImpl`
      Returns:
        the last child of the element, or null if there are no children

    - #### getChildNodes

          public final org.w3c.dom.NodeList getChildNodes()

      Return a `NodeList` that contains all children of this node. If there are no children, this is a `NodeList` containing no nodes.
      Specified by:
        `getChildNodes` in interface `org.w3c.dom.Node`
      Overrides:
        `getChildNodes` in class `NodeImpl`

    - #### getNthChild

          protected final NodeImpl getNthChild(int n)

      Get the nth child node of the element (numbering from 0)
      Returns:
        the last child of the element, or null if there is no n'th child

    - #### getStringValue

          public java.lang.String getStringValue()

      Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.
      Returns:
        the accumulated character content of the element, including descendant elements.

    - #### copyStringValue

          public void copyStringValue(Outputter out)
                               throws javax.xml.transform.TransformerException

      Copy the string-value of this node to a given outputter
      Specified by:
        `copyStringValue` in interface `NodeInfo`
      Overrides:
        `copyStringValue` in class `AbstractNode`
      Throws:
        `javax.xml.transform.TransformerException`

    - #### useChildrenArray

          public void useChildrenArray(NodeImpl[] array)

      Supply an array to be used for the array of children. For system use only.

    - #### addChild

          public void addChild(NodeImpl node,
                      int index)

      Add a child node to this node. For system use only. Note: normalizing adjacent text nodes is the responsibility of the caller.

    - #### removeChild

          public void removeChild(int index)

      Remove node at given index. Will always be followed by a renumberChildren().

    - #### renumberChildren

          public void renumberChildren()

      Renumber the children of a given parent node. For system use only

    - #### dropChildren

          public void dropChildren()

      Drop a branch of the tree. The target element remains in the tree, but its children are disconnected from the parent. Unless there are other references to the children (e.g. in a variable) they will be deleted from memory next time the garbage collector comes round.

    - #### compact

          public void compact(int size)

      Compact the space used by this node

    - #### getNodeValue

          public java.lang.String getNodeValue()

      Get the node value as defined in the DOM. This is not the same as the XPath string-value.
      Specified by:
        `getNodeValue` in interface `org.w3c.dom.Node`
      Overrides:
        `getNodeValue` in class `AbstractNode`