|
Subject: Re: [xsl] [xslt] not working transformation when function called From: Michalmas <michalmas@xxxxxxxxx> Date: Thu, 19 Mar 2009 22:40:29 +0100 |
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@xxxxxxxxx>
wrote:
> Michalmas wrote:
>> But why this trigger:
>>
>> <xsl:template match="move/from">
>> B <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 Tennisonbs,
> Michael Kaybs, or Ken Holmanbs; 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. B It says to apply
> templates (to its children).
>
> The first child encountered is move. B There is no template that
> explicitly matches move; instead, the template matching * is used. B That
> template says to copy the element. B Thus, the entire move element is
copied.
>
> And... thatbs it. B 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 B <URL: http://crism.maden.org/ >
> bAll I ask of living is to have no chains on me,
> B And all I ask of dying is to go naturally.b b Laura Nyro
> GnuPG Fingerprint: C6E4 E2A9 C9F8 71AC 9724 CAA3 19F8 6677 0077 C319
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] [xslt] not working transf, Christopher R. Maden | Thread | Re: [xsl] [xslt] not working transf, Michalmas |
| Re: [xsl] [xslt] not working transf, Christopher R. Maden | Date | Re: [xsl] Fwd: using xquey in XSLT , Michalmas |
| Month |