Oops... this might be what you are after instead...
executeChildTemplatesToXML or ToString or ToXMLString
may be what you are after..


/**
* A repository for common functions that can be used but the extension
* functions and extension elements.
*
*
* Title:       Base Functions
* Copyright:   Copyright (c) 2005
* Company:     Eye Catching Solutions Inc.
* @version     1.0
* @author      John Gentilin
*/


public class BaseFunctions
{
private static Category m_Log = Category.getInstance("RapidXSL.Interface");
 private static DocumentBuilderFactory  m_dfactory = null;
 private static DocumentBuilder  m_docBuilder = null;


 /**
  * @param context
  * @param elem
  * @throws TransformerException
  */
protected void executeChildTemplates( XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException
 {
   TransformerImpl transf = context.getTransformer();
   transf.executeChildTemplates(elem,
       context.getContextNode(),
       context.getMode(), transf.getResultTreeHandler());
 }
 /**
  * @param context
  * @param elem
  * @throws TransformerException
  */
protected Document executeChildTemplatesToXML(Document doc, XSLProcessorContext context, ElemExtensionCall elem ) throws XMLServerException
 {
   DOMBuilder builder = null;
TransformerImpl transformer = context.getTransformer(); try
   {
     builder = new DOMBuilder(doc);
transformer.executeChildTemplates(elem,
         context.getContextNode(),
         context.getMode(), builder);

   }
   catch (Exception e)
   {
throw new XMLServerException("RXSL_IFACE", "XSL Interface Error - " + e.getLocalizedMessage());
   }
   return doc;
 }

 /**
  * @param context
  * @param elem
  * @throws TransformerException
  */
protected String executeChildTemplatesToString(XSLProcessorContext context, ElemExtensionCall elem ) throws XMLServerException
 {
TransformerImpl transformer = context.getTransformer(); try
   {
     TextSerializationHandler handler = new TextSerializationHandler();
transformer.executeChildTemplates(elem,
         context.getContextNode(),
         context.getMode(), handler);
return handler.toString();

   }
   catch (Exception e)
   {
throw new XMLServerException("RXSL_IFACE", "XSL Interface Error - " + e.getLocalizedMessage());
   }
 }

protected String executeChildTemplatestoXMLString(XSLProcessorContext context, ElemExtensionCall elem)
   throws TransformerException, SAXException
  {
     try
     {
       TransformerImpl transformer = context.getTransformer();
// This should be worked on so that the output format can be
       // defined by a first child of the redirect element.
       OutputProperties format = transformer.getOutputFormat();
       Properties prop = format.getProperties();
       format.setProperty("indent","no");
format.setProperty("{http://xml.apache.org/xalan}indent-amount","0";); ByteArrayOutputStream ostream = new ByteArrayOutputStream();
       SerializationHandler serializer =
       transformer.createSerializationHandler(
         new StreamResult(ostream),
         format);
serializer.startDocument(); transformer.executeChildTemplates(elem,
       context.getContextNode(),
       context.getMode(), serializer);
serializer.flushPending();
       serializer.endDocument();
       return ostream.toString("ISO-8859-1");
     }
     catch (UnsupportedEncodingException e)
     {
m_Log.fatal("Error Encoding Bytes from XML - " + e.getLocalizedMessage());
       return new String();
     }
}



 /**
* Get the Node Value of a Stylesheet Element. This will be used to collect
  * the data value when populating a Control.....
  *
  * @return
  */
 protected String getNodeValue( ElemExtensionCall elem )
 {
   Node child = elem.getFirstChild();
   if (child != null)
   {
     return child.getNodeValue();
   }
return null;
 }
/**
   * Resolve the Attribute Selection for the fixed attribute "select"
   *
   * @return
   * @throws TransformerException
   */
protected String getStringValueFromSelectExpr(XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException
  {
    return getStringValueFromAttribute("select", context, elem);
  }
/**
 * Find the Attribute named "attrib" and convert that to an XPath statement
 * that can be executed.
 *
 * Return null if the Attribute did not exist.
 *
 * @param attrib
 * @return
 * @throws TransformerException
 */
protected static XPath getAttributeExpr( String attrib, XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException
  {
    String expr =
     elem.getAttribute (attrib,
                        context.getContextNode(),
                        context.getTransformer());
if(null != expr)
    {
      org.apache.xpath.XPathContext xctxt
        = context.getTransformer().getXPathContext();
return new XPath(
            expr,
            elem,
            xctxt.getNamespaceContext(), XPath.SELECT);
    }
return null; }


 /**
  *
* Get the value of an Attribute. It will first try to treat the attribute as an XPath
  * if that fails then just return the attribute value itself.
  *
  * @param attrName
  * @param context
  * @param elem
  * @return
*/ protected String getStringValueFromAttribute( String attrName, XSLProcessorContext context, ElemExtensionCall elem )
 {
     XPath path;
     String value = null;
     try
     {
       path = getAttributeExpr(attrName, context, elem);
       if (path != null)
       {
         XObject data = executeXPath(path, context, elem);
         if (data != null) value = data.xstr().toString();
       }
     }
     catch (TransformerException e)
     {
       value = elem.getAttribute(attrName);
     }
if (value == null) value = "";
     return value;
 }
 /**
  * A helper function to execute an XPath Object.
  *
  * @param path
  * @return
  * @throws TransformerException
  */
protected static XObject executeXPath( XPath path, XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException
 {
   org.apache.xpath.XPathContext xctxt
     = context.getTransformer().getXPathContext();
return path.execute(xctxt, context.getContextNode(), elem);
 }

 protected Document getEmptyDocument()
 {
   initDocFactory();
   return m_docBuilder.newDocument();
 }
protected static void initDocFactory()
 {
   if (m_dfactory != null) return;
   try
   {
     m_dfactory = DocumentBuilderFactory.newInstance();
     m_docBuilder = m_dfactory.newDocumentBuilder();
   }
   catch (Exception e)
   {
m_Log.fatal("RapidXSL Interface, failure to init XML Subsystem - " + e.getLocalizedMessage());
   }
 }
}
Cynepnaxa wrote:
Hi, everybody!
I start to write simple extension element, but a problem occurs. I want to
access extension element's subelements in java+xalan. My xsl contains
following block of code:
<my-ext:request>
<body><xsl:value-of select="$body"/></body>
<contentType>text/html</contentType>
<metaData><![CDATA[<?xml version="1.0" encoding="utf-8"?>]]><metaData>
<xsl:value-of select="$metaData"/>
</metaData>
</metaData>
</my-ext:request>
In extension element Java-method i have "XSLProcessorContext context" and
"ElemExtensionCall elem". I can get contentType by calling for example
"elem.getFirstChild().getNextSibling().getFirstChild().getTextContent()",
but i want to access subelements by tag name(for example, by
elem.getElementsByTagName("metadata"), or XPath). I have no idea how to
access in java content of $body variable and xml - encapsulated $metaData.
All google - examples shining no light. Is simple xslt - subelements access
method exist? Big thanx for help.
P.S. Sorry for my English. I hope you understand me.



Reply via email to