Hi John,

Thank you for your reply.

I implemented you sample code and it worked. However it did not address my 
main problem processing child nodes from within a extention function.

Example:

XML Source;
<xdf:form id="info">
        <xdf:input name="myBackendObj.name" foo="xxx"/>
</xdf:form>

Expected output
<form id="info" name="myBackendObj">
        <input name="myBackendObj.name" value="current value" foo="xxx">
</form>


XSLT

<xsl:template match="xdf:form">
           <myJava:myForm()/>
</xsl:template>

<xsl:template match="xdf:input">
          <myJava:myInput()/>
</xsl:template>


The myForm() function should do following.

form.createElementStart("form");
form.setAttributes();
executeChildTemplates()
form.createElementStart("form");


The creation of the "form" element is a doddel but the executeChildTemplates() 
is the problem 

 

Any ideas 

Peter






On Thursday 30 September 2004 00:31, John Gentilin wrote:
> Joe,
>
> Is this what you are looking for, see code below.  I have been using the
> code to create
> content in both the output tree and in variables. Although I have found
> that not all XSL
> elements are created equal. i.e. If I use this code to output content
> into the ResultTree
> or a Parameter it will work fine, but if I use similar code to populate
> an xsl:attribute it
> will not work unless I wrapper the code in an xsl:copy statement. I sent
> an email to the
> list because I wanted an interpretation of the spec before I entered a
> bug. As an example
>
> This does not work
> <xsl:element name="foo">
>  <xsl:attribute name="test">
>    <myext:function />
>  </xsl:attribute>
> </xsl:element>
>
> but this does.
> <xsl:element name="foo">
>  <xsl:attribute name="test">
>     <xsl:copy> <myext:function /></xsl:copy>
>  </xsl:attribute>
> </xsl:element>
>
>
> This method creates an element, then just adds text to the element.
> You would probably need to walk your RTF making a copy of the
> RTF to the output.
>
> I hacked a bunch of code out to make the example simpler hopefully not
> too much :-)
>
> HTH
> -JG
>
>   public void element( XSLProcessorContext context, ElemExtensionCall
> elem ) throws javax.xml.transform.TransformerException
>   {
>     // Grab the name of out parameter.
>     String pname = elem.getAttribute("name");
>     if ((pname==null) || (pname.length() == 0)) return;
>
>     String value = "Element Value";
>     if (value == null) value = "";
>
>     try
>     {
>       SerializationHandler handler =
> context.getTransformer().getResultTreeHandler();
>
>       handler.startElement("", QName.getLocalPart(pname), pname, null);
>
>       if (buse_cdata == true) handler.startCDATA();
>       handler.characters(value.toCharArray(), 0, value.length());
>       if (buse_cdata == true) handler.endCDATA();
>
>       handler.endElement("", QName.getLocalPart(pname), pname);
>       handler.flushPending();
>     }
>     catch (SAXException se)
>     {
>       throw new TransformerException(se);
>     }
>
> Peter Lerche wrote:
> >Hi Joe,
> >
> >Thanks for your reply. However I just don't get it.
> >
> >If I make my function return type "String" a string will be placed in the
> >result tree. If the function return type is Node or DocumentFargment it
> >returns nothing.
> >
> >Calling myFunction in the xsl template should result in swapping  the
> ><my:para> with a <p> tag and place the <p> tag in the result tree.
> >All child elements of the <p> tag should be returned to the source tree
> > for xslt processing.
> >But how......
> >
> ><xsl:template match="my:para">
> >            <myJava:myFunction()/>
> ></xsl:template>
> >
> ><xsl:template match="c1">
> >           Do something......
> ></xsl:template>
> >
> >I have following XML doc.
> >
> ><my:para>
> >     <a/>
> >     <b/>
> >     <c>
> >             <c1>
> >                     test
> >             </c1>
> >     <c>
> ></my:para>
> >
> >
> >
> >A. this function will return NOTHING
> > public static Node myFunction(ExpressionContext context) {
> >         Node contextNode = context.getContextNode();
> >        Element element=contextNode.getOwnerDocument().createElement("p");
> >        return element;
> >}
> >
> >A. this function will return the String
> > public static String myFunction(ExpressionContext context) {
> >        return "Hello";
> >}
> >
> >
> >
> >Peter
> >
> >On Wednesday 29 September 2004 20:58, Joseph Kesselman wrote:
> >>I believe the answer was, and is, that extension elements can't return
> >>content yet.
> >>
> >>Extension _functions_ can. See the docs for information about what kinds
> >> of values will be interpreted as Xalan node-sets when returned by an
> >> extension function's implementation.
> >>
> >>http://xml.apache.org/xalan-j/extensions.html
> >>
> >>______________________________________
> >>Joe Kesselman, IBM Next-Generation Web Technologies: XML, XSL and more.
> >>"The world changed profoundly and unpredictably the day Tim Berners Lee
> >>got bitten by a radioactive spider." -- Rafe Culpin, in r.m.filk
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]

-- 
Med venlig hilsen / Yours sincerely 
 
Peter
http://easyspeedy.com 
_______________________________________ 
European Dedicated Server Hosting 
Extremely low prices, secure, and reliable
Linux and BSD distributions only 
_______________________________________

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to