XSLT Delimited Text Node

M

Mike King

Is there a way in XSLT to match on numbers that are delimited by a character
or space in a text node?
 
M

Martin Honnen

Mike said:
Is there a way in XSLT to match on numbers that are delimited by a character
or space in a text node?

XSLT 2.0 can do that nicely with the tokenize XPath 2.0 function e.g.
with the input being

<?xml version="1.0" encoding="UTF-8"?>
<root>
<data-list>1 2 3 4 5</data-list>
</root>

and the stylesheet

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:eek:utput method="xml" indent="yes" />

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="data-list">
<xsl:copy>
<xsl:for-each select="tokenize(., '\s+')">
<data><xsl:value-of select="." /></data>
</xsl:for-each>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

the result using Saxon 8.3 is


<?xml version="1.0" encoding="UTF-8"?>
<root>
<data-list>
<data>1</data>
<data>2</data>
<data>3</data>
<data>4</data>
<data>5</data>
</data-list>
</root>


If you want to use XSLT 1.0 then you need to write a recursive template
taking the string with the numbers as the argument and splitting it up
using XPath 1.0 functions like substring-before, substring-after etc.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,999
Messages
2,570,246
Members
46,839
Latest member
MartinaBur

Latest Threads

Top