|
next
|
 Subject: pattern match in xslt Author: siva raman Date: 08 Jan 2005 08:37 AM
|
Ivan,
thanks for ur reply.
Pls find find the possibilitis in the input xml file as:-
<c rid="c1">Benham, Smith, & Nash, 2002</c>
<c rid="c2">Benham, Smith, & Nash 2002</c>
<c rid="c3">Shor and Orne (1962)</c>
My requirement in output xml is as follows:
Benham, Smith, & Nash, <y rid="y1">2002</y>
Benham, Smith, & Nash <y rid="y2">2002</y>
Shor and Orne <y rid="y3">(1962)</y>
thanks
Siva
|
next
|
 Subject: pattern match in xslt Author: Ivan Pedruzzi Date: 10 Jan 2005 05:34 PM Originally Posted: 10 Jan 2005 05:35 PM
|
Assuming the input document looks like that
<?xml version="1.0"?>
<root>
<c rid="c1">Benham, Smith, & Nash, 2002</c>
<c rid="c2">Benham, Smith, & Nash 2002</c>
<c rid="c3">Shor and Orne (1962)</c>
</root>
The following xslt should help
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="root/c"/>
</root>
</xsl:template>
<xsl:template match="c">
<xsl:variable name="year_position">
<xsl:call-template name="get_year_position">
<xsl:with-param name="context" select="."/>
</xsl:call-template>
</xsl:variable>
<c>
<xsl:value-of select="substring(., 1, $year_position)"/>
<y>
<xsl:attribute name="rid">
<xsl:value-of select="concat('y',substring(@rid, 2))"/>
</xsl:attribute>
<xsl:value-of select="substring(., $year_position+1)"/>
</y>
</c>
</xsl:template>
<xsl:template name="get_year_position">
<xsl:param name="context"/>
<xsl:param name="pos" select="string-length($context)"/>
<xsl:choose>
<xsl:when test="$pos > 0 and translate(substring(., $pos, 1), '1234567890()', '')=''">
<xsl:call-template name="get_year_position">
<xsl:with-param name="context" select="$context"/>
<xsl:with-param name="pos" select="$pos - 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pos"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
The result should be something like that
<?xml version='1.0' ?>
<root>
<c>Benham, Smith, & Nash,
<y rid="y1">2002</y>
</c>
<c>Benham, Smith, & Nash
<y rid="y2">2002</y>
</c>
<c>Shor and Orne
<y rid="y3">(1962)</y>
</c>
</root>
|
|
|
|