xsl-list
[Top] [All Lists]

RE: xsl split string

2005-12-11 16:58:02
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(_dot_)laplanche(_at_)horus-si(_dot_)com] 
Sent: 11 December 2005 20:13
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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



--~------------------------------------------------------------------
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>