RE: [xsl] xsl split string

Subject: RE: [xsl] xsl split string
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 11 Dec 2005 23:58:02 -0000
In XSLT 2.0, use the tokenize() function.

With XSLT 1.0, try the str:tokenize template found at http://www.exslt.org/

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

> -----Original Message-----
> From: Philippe LAPLANCHE [mailto:philippe.laplanche@xxxxxxxxxxxx]
> Sent: 11 December 2005 20:13
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] xsl split string
>
> Hi
>
> I have to transform this "compressed" xml :
>
> <root fields="CHP-CODE|CHP-TABLE|CHP-LIBELLE">
>          <update xi="5" xk="5" a="CHP-ORDRE" b="champs" c="Ordre"/>
> </root>
>
>
> Into this :
>
> <page>
> 	<sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0";>
> 		<sql:querry>
> 			UPDATE `config`
> 				SET `CHP-CODE`='CHP-ORDRE',
> 				    `CHP-TABLE`='champs',
> 				    `CHP-LIBELLE`='Ordre'
> 				WHERE UID='5'
> 		</sql:querry>
> 	</sql:execute-query>
> </page>
>
> My problem is that I don't know how to extract CHP-CODE,
> CHP-TABLE and CHP-LIBELLE from the fields attribute of the
> root node. I have to do something generic that would work if
> the fields attribute is longer.
>
> For now I have this stylesheet. I just don't know how to
> complete the part where I put ......
>
> 	<xsl:template match="/root">
> 		<page>
> 			<xsl:apply-templates select="*"/>
> 		</page>
> 	</xsl:template>
>
> 	<xsl:template match="update">
> 		<sql:execute-query
> xmlns:sql="http://apache.org/cocoon/SQL/2.0";>
> 			<sql:query>
> 				UPDATE `config`
> 				SET <xsl:apply-templates
> select="@*[not(name()='xk' or name()='xi')]" mode="update"/>
> 				WHERE <xsl:apply-templates
> select="@xk" mode="update"/>
> 			</sql:query>
> 		</sql:execute-query>
> 	</xsl:template>
>
> 	<xsl:template match="@*" mode="update">
> 		`..........` = '<xsl:value-of select="."/>'
> <xsl:if test="not(position()=last())">,</xsl:if>
> 	</xsl:template>
>
>
> Philippe

Current Thread