Mario Madunic wrote:
I have the following element (I'm using Saxon9 and XSLT2)
<p>Crazing – Hairline cracking of the resin, giving it an opaque, <q>frosty</q>
appearance.</p>
I need to break it into two halves like the following based on the – (space en dash
space) and only the first – (space en dash space).
<p>
<term>Crazing</term>
<definition>Hairline cracking of the resin, giving it an opaque, <q>frosty</q>
appearance.</definition>
</p>
This stylesheet
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:variable name="this" select="."/>
<xsl:variable name="t" select="text()[1]"/>
<xsl:analyze-string select="$t" regex="(.*) – (.*)">
<xsl:matching-substring>
<term><xsl:value-of select="regex-group(1)"/></term>
<definition>
<xsl:value-of select="regex-group(2)"/>
<xsl:apply-templates select="$t/following-sibling::node()"/>
</definition>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:apply-templates select="$this/node()"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
does that but I have not tested against anything but your input sample.
--
Martin Honnen
http://msmvps.com/blogs/martin_honnen/
--~------------------------------------------------------------------
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>
--~--