org.cdmckay.coffeedom.transform
Class CoffeeDOMResult

java.lang.Object
  extended by javax.xml.transform.sax.SAXResult
      extended by org.cdmckay.coffeedom.transform.CoffeeDOMResult
All Implemented Interfaces:
Result

public class CoffeeDOMResult
extends SAXResult

A holder for an XSL Transformation result, generally a list of nodes although it can be a CoffeeDOM Document also. As stated by the XSLT 1.0 specification, the result tree generated by an XSL transformation is not required to be a well-formed XML document. The result tree may have "any sequence of nodes as children that would be possible for an element node".

The following example shows how to apply an XSL Transformation to a CoffeeDOM document and get the transformation result in the form of a list of CoffeeDOM nodes:


   public static List transform(Document doc, String stylesheet)
                                        throws CoffeeDOMException {
     try {
       Transformer transformer = TransformerFactory.newInstance()
                             .newTransformer(new StreamSource(stylesheet));
       CoffeeDOMSource in = new CoffeeDOMSource(doc);
       CoffeeDOMResult out = new CoffeeDOMResult();
       transformer.transform(in, out);
       return out.getResult();
     }
     catch (TransformerException e) {
       throw new CoffeeDOMException("XSLT Transformation failed", e);
     }
   }
 

Author:
Laurent Bihanic, Jason Hunter, Cameron McKay
See Also:
CoffeeDOMSource

Field Summary
static String CoffeeDOM_FEATURE
          If TransformerFactory.getFeature(String) returns true when passed this value as an argument, the Transformer natively supports CoffeeDOM.
 
Fields inherited from class javax.xml.transform.sax.SAXResult
FEATURE
 
Fields inherited from interface javax.xml.transform.Result
PI_DISABLE_OUTPUT_ESCAPING, PI_ENABLE_OUTPUT_ESCAPING
 
Constructor Summary
CoffeeDOMResult()
          Public default constructor.
 
Method Summary
 Document getDocument()
          Returns the result of an XSL Transformation as a CoffeeDOM document.
 CoffeeDOMFactory getFactory()
          Returns the custom CoffeeDOMFactory used to build the transformation result.
 List<Content> getResult()
          Returns the result of an XSL Transformation as a list of CoffeeDOM nodes.
 void setDocument(Document document)
          Sets the document produced as result of an XSL Transformation.
 void setFactory(CoffeeDOMFactory factory)
          Sets a custom CoffeeDOMFactory to use when building the transformation result.
 void setHandler(ContentHandler handler)
          Sets the target to be a SAX2 ContentHandler.
 void setLexicalHandler(LexicalHandler handler)
          Sets the SAX2 LexicalHandler for the output.
 void setResult(List<Content> result)
          Sets the object(s) produced as result of an XSL Transformation.
 
Methods inherited from class javax.xml.transform.sax.SAXResult
getHandler, getLexicalHandler, getSystemId, setSystemId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CoffeeDOM_FEATURE

public static final String CoffeeDOM_FEATURE
If TransformerFactory.getFeature(String) returns true when passed this value as an argument, the Transformer natively supports CoffeeDOM.

Note: This implementation does not override the SAXResult.FEATURE value defined by its superclass to be considered as a SAXResult by Transformer implementations not natively supporting CoffeeDOM.

See Also:
Constant Field Values
Constructor Detail

CoffeeDOMResult

public CoffeeDOMResult()
Public default constructor.

Method Detail

setResult

public void setResult(List<Content> result)
Sets the object(s) produced as result of an XSL Transformation.

Note: This method shall be used by the Transformer implementations that natively support CoffeeDOM to directly set the transformation result rather than considering this object as a SAXResult. Applications should not use this method.

Parameters:
result - the result of a transformation as a list of CoffeeDOM nodes (Elements, Texts, Comments, PIs...).
See Also:
getResult()

getResult

public List<Content> getResult()
Returns the result of an XSL Transformation as a list of CoffeeDOM nodes.

If the result of the transformation is a CoffeeDOM document, this method converts it into a list of CoffeeDOM nodes; any subsequent call to getDocument() will return null.

Returns:
the transformation result as a (possibly empty) list of CoffeeDOM nodes (Elements, Texts, Comments, PIs...).

setDocument

public void setDocument(Document document)
Sets the document produced as result of an XSL Transformation.

Note: This method shall be used by the Transformer implementations that natively support CoffeeDOM to directly set the transformation result rather than considering this object as a SAXResult. Applications should not use this method.

Parameters:
document - the CoffeeDOM document result of a transformation.
See Also:
setResult(java.util.List), getDocument()

getDocument

public Document getDocument()
Returns the result of an XSL Transformation as a CoffeeDOM document.

If the result of the transformation is a list of nodes, this method attempts to convert it into a CoffeeDOM document. If successful, any subsequent call to getResult() will return an empty list.

Warning: The XSLT 1.0 specification states that the output of an XSL transformation is not a well-formed XML document but a list of nodes. Applications should thus use getResult() instead of this method or at least expect null documents to be returned.

Returns:
the transformation result as a CoffeeDOM document or null if the result of the transformation can not be converted into a well-formed document.
See Also:
getResult()

setFactory

public void setFactory(CoffeeDOMFactory factory)
Sets a custom CoffeeDOMFactory to use when building the transformation result. Use a custom factory to build the tree with your own subclasses of the CoffeeDOM classes.

Parameters:
factory - the custom CoffeeDOMFactory to use or null to use the default CoffeeDOM classes.
See Also:
getFactory()

getFactory

public CoffeeDOMFactory getFactory()
Returns the custom CoffeeDOMFactory used to build the transformation result.

Returns:
the custom CoffeeDOMFactory used to build the transformation result or null if the default CoffeeDOM classes are being used.
See Also:
setFactory(org.cdmckay.coffeedom.CoffeeDOMFactory)

setHandler

public void setHandler(ContentHandler handler)
Sets the target to be a SAX2 ContentHandler.

Overrides:
setHandler in class SAXResult
Parameters:
handler - Must be a non-null ContentHandler reference.

setLexicalHandler

public void setLexicalHandler(LexicalHandler handler)
Sets the SAX2 LexicalHandler for the output.

This is needed to handle XML comments and the like. If the lexical handler is not set, an attempt should be made by the transformer to cast the ContentHandler to a LexicalHandler.

Overrides:
setLexicalHandler in class SAXResult
Parameters:
handler - A non-null LexicalHandler for handling lexical parse events.


Copyright © 2011. All Rights Reserved.