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 |