xsl-list
[Top] [All Lists]

Re: [xsl] [xslt] not working transformation when function called

2009-03-19 17:40:57
Hi all,

I see that in example i put all templates for copy on top. In fact, i
had different structure and the calling the template i wanted was
working. Also, the XML i used is only part of big XML structure, and
that part is repeated many times.

To clear it up:
i have following code:
<xsl:template match="*">

<xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
        
</xsl:template>


<xsl:template match="move">
   <xsl:variable name="names" select=".//dataname" />
        <datatype><xsl:value-of 
select="local:getNodeType(/,$names)"/></datatype>
</xsl:template>


 <xsl:function name="local:getNodeType">
                   <xsl:param name="node" as="node()*"/>                
                   <xsl:param name="searchValue" as="xs:string*"/>

       <xsl:choose>
           <xsl:when test="empty($searchValue)">
               <xsl:sequence select="$node/pic-value"/>
           </xsl:when>
           <xsl:otherwise>
               <xsl:sequence
select="local:getNodeType($node//data-declaration[name=$searchvalue[1]][1],
$searchValue[postion() != 1])"/>
           </xsl:otherwise>
       </xsl:choose>
 </xsl:function>

</xsl:stylesheet>


applied on that XML:
<someNodes>
(...)
     <move>
               <from>
                  <dataname>01</dataname>
                  <dataname>02</dataname>
               </from>
               <to>
                 <qualification>
                   <dataname>001</dataname>
                   <dataname>002</dataname>
                 </qualification>
               </to>
     </move>
(...)
</someNodes>


And i want to tranform it to:
<move>
              <from datatype='XXX'> <!-- VALUE RETURNED BY
local:getNodeType FUNTION -->
                 <dataname>01</dataname>
                 <dataname>02</dataname>
              </from>
              <to>
                <qualification datatype='ZZZ'> <!-- VALUE RETURNED BY
local:getNodeType FUNTION -->
                  <dataname>001</dataname>
                  <dataname>002</dataname>
                </qualification>
              </to>
 </move>


thanks!

On Thu, Mar 19, 2009 at 10:26 PM, Christopher R. Maden 
<crism(_at_)maden(_dot_)org> wrote:
Michalmas wrote:
But why this trigger:

<xsl:template match="move/from">
  <datatype><xsl:value-of select="local:getNodeType(/,
./dataname)"/></datatype> <!--DATATYPE -->
</xsl:template>

doesn't work?

You should probably review some basic texts, just as Jeni Tennison’s,
Michael Kay’s, or Ken Holman’s; there seems to be some confusion about
the basic XSLT processing model.

To elaborate on what David Carlisle said:

You have a template that matches /, the document node.  It says to apply
templates (to its children).

The first child encountered is move.  There is no template that
explicitly matches move; instead, the template matching * is used.  That
template says to copy the element.  Thus, the entire move element is copied.

And... that’s it.  There are no more children of /, so nothing else is done.

You probably want, as I suggested, to nuke the * template and allow the
default template to apply, or else use the identity transformation
(which is available in a thousand places with a quick Web search) as
your starting point.

~Chris
--
Chris Maden, text nerd  <URL: http://crism.maden.org/ >
“All I ask of living is to have no chains on me,
 And all I ask of dying is to go naturally.” — Laura Nyro
GnuPG Fingerprint: C6E4 E2A9 C9F8 71AC 9724 CAA3 19F8 6677 0077 C319

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--