RE: [xsl] Tree Fragment versus Node Set

Subject: RE: [xsl] Tree Fragment versus Node Set
From: "Kevin L. Cobb" <kevin.cobb@xxxxxxxxxxxx>
Date: Thu, 15 Sep 2005 14:24:14 -0400
Nope. Here is what I belive the problem to be.

My template call is using an Extension Function to return a snippet of
XML.
Is this causing the processor to get confused about what data type is
returned?
Do I need to convert the String representation of the XML to a NodeSet
(not
sure how this is done).


Here's a better, more complete, example of what I'm trying to do . . .

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0"
                xmlns:xalan="http://xml.apache.org/xalan";
                xmlns:vocabUtil="gov.cdc.pdp.vocabulary.VocabUtility"
                exclude-result-prefixes="xalan">
   <xsl:template match="/">
      <out>
         <xsl:variable name="var1">
            <docelem>
               <elem1>
                  <elem1a>ELEMENT1A</elem1a>
                  <elem1b>,ELEMENT1B</elem1b>
               </elem1>
               <elem2>
                  <elem2a>ELEMENT2A</elem2a>
               </elem2>
            </docelem>
         </xsl:variable>

         <xsl:variable name="var2">
            <xsl:call-template name="myTemplateCall">
               <xsl:with-param name="arg1" select="'arg1value'"/>
            </xsl:call-template>
         </xsl:variable>

         <!-- OUT HERE IS WHAT IS EXPECTED -->
         <xsl:for-each select="xalan:nodeset($var1)/docelem//*">
            <xsl:value-of select="name(.)"/>
            <xsl:text>,</xsl:text>
         </xsl:for-each>

         <!-- OUTPUT HERE DOES NOT HAPPEN ....  UGHHHH -->
         <xsl:comment><xsl:value-of select="$var2"/></xsl:comment>
         <xsl:for-each select="xalan:nodeset($var2)/vvResult//*">
            <xsl:value-of select="name(.)"/>
            <xsl:text>,</xsl:text>
         </xsl:for-each>

      </out>
   </xsl:template>


   <xsl:template name="myTemplateCall">
      <xsl:param name="arg1"/>

      <xsl:value-of select="vocabUtil:validateCode($arg1)"/>
      <!-- This extension function returns this XML snippet -->
      <!-- <vvResult> -->
      <!--   <element1>some value</element1> -->
      <!--   <element2>some value</element2> -->
      <!-- </vvResult> -->

   </xsl:template>


</xsl:stylesheet>



-----Original Message-----
From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
Sent: Thursday, September 15, 2005 2:14 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] Tree Fragment versus Node Set

Perhaps your elements are actually namespaced? Just a thought.

Try <xsl:message><xsl:copy-of select="$myVar"/></xsl:message>

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Kevin L. Cobb [mailto:kevin.cobb@xxxxxxxxxxxx]
> Sent: 15 September 2005 17:43
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Tree Fragment versus Node Set
>
> Now I have a problem getting values out of my node-set which was
> converted from the tree fragment.
>
>    <xsl:variable name="myVar">
>       <xsl:call-template name="buildMyVariableNode">
>          <xsl:with-param name="arg1" select="'test1'"/>
>          <xsl:with-param name="arg2" select="'test2'"/>
>       </xsl:call-template>
>    </xsl:variable>
>
>    <xsl:value-of
> select="xalan:nodeset($myVar)/result/firstElement/text()"/>
>
> I get nothing back for the value-of tag. My XML snippet that is the
> nodeset would look something like this:
>
>    <result>
>       <firstElement>some value</firstElement>
>       <secondtElement>some value</secondElement>
>    </result>
>
> I've tried variations on the XPATH expression but nothing is working.
> This simply
> ouput of the nodeset works as expected.
>
>    <xsl:value-of select="$myVar"/>
>
> And also ...
>
>    <xsl:value-of select="xalan:nodeset($myVar)"/>
>
> I know I must be missing something simple but I can't seem to see if
> for the trees.
>
> -Kevin
>
> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> Sent: Thursday, September 15, 2005 12:15 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Tree Fragment versus Node Set
>
> > is there a
> > better way to do this?
>
> No, in 1.0 there isn't. You sometimes need to create result tree
> fragments.
> But don't do it when you don't need to.
>
> Michael Kay
> http://www.saxonica.com/
>
> > -----Original Message-----
> > From: Kevin L. Cobb [mailto:kevin.cobb@xxxxxxxxxxxx]
> > Sent: 15 September 2005 15:33
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Tree Fragment versus Node Set
> >
> > I realize that its always better to form my variables into
> node-sets
> > versus tree fragments by using the select attribute
> whenever possible.
> > But, can one ALWAYS prevent (in XSLT 1.0) making a tree
> fragment? For
> > example, if building my variable comes from a template
> call, is there
> > a better way to do this?
> >
> >    <xsl:variable name="myVar">
> >       <xsl:call-template name="buildMyVariableNode">
> >          <xsl:with-param name="arg1" select="'test1'"/>
> >          <xsl:with-param name="arg2" select="'test2'"/>
> >       </xsl:call-template>
> >    </xsl:variable>
> >
> > -Thanks,
> >
> > Kevin

Current Thread