hi Joe,
Thank you, I got it working.
Peter
On Friday 01 October 2004 00:15, John Gentilin wrote:
> Peter,
>
> I do this a little different than you are attempting to do, but I think
> it will work.
> I am assuming that myJava:myInput/MyForm is really like this
>
> <xsl:template match="xdf:form">
> <myJava:myForm id="@id" />
> </xsl:template>
>
> <xsl:template match="xdf:input">
> <myJava:myInput name="@name" value="@value" foo="@foo" />
> </xsl:template>
>
> Where the XSLT is copying the data values into the extension element call.
>
> If so, what you need to do is.
> In myForm, output the form start element to the output tree. Then call this
> method
>
> private void executeChildTemplates( XSLProcessorContext context,
> ElemExtensionCall elem ) throws TransformerException
> {
> TransformerImpl transf = context.getTransformer();
> transf.executeChildTemplates(elem,
> context.getContextNode(),
> context.getMode(), transf.getContentHandler());
> }
>
> Notice that is uses the current content handler..
>
> executeChildTemplates should make the match to the next template which will
> trigger the next extension element call. At this point, you are emitting
> SAX events into the same output tree. So myForm can create is input start
> element, then also process the ChildTemplates, after ChildTemplates
> returns, then you want to close the elements that you started and flush the
> output tree.
>
> So if use the example I sent you before and replace the block of method
> calls that are outputting characters with the method above, it should just
> work.
>
> Look at the Redirect extension element, there is some good code in there to
> use as an example. At least that is where I started.
>
> -JG
>
> Peter Lerche wrote:
> >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]
>
> ---------------------------------------------------------------------
> 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]