xsl-list
[Top] [All Lists]

RE: [xsl] nodes() before and after a string delimiter

2009-10-29 07:30:26
Martin,

Thanks for the quick reply and solution. This is definitely one for the toolbox.

Marijan (Mario) Madunic
Publishing Specialist
New Flyer Industries

-----Original Message-----
From: Martin Honnen [mailto:Martin(_dot_)Honnen(_at_)gmx(_dot_)de] 
Sent: Wednesday, October 28, 2009 2:53 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] nodes() before and after a string delimiter

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


--------------------------------------------------------------------
Please consider the environment before printing this e-mail.

CONFIDENTIALITY STATEMENT: This communication (and  any and all information or 
material transmitted with this communication) is confidential, may be 
privileged and is intended only for the use of the intended recipient. If you 
are not the intended recipient, any review, retransmission, circulation, 
distribution, reproduction, conversion to hard copy, copying or other use of 
this communication, information or material is strictly prohibited and may be 
illegal. If you received this communication in error or if it is forwarded to 
you without the express authorization of New Flyer, please notify us 
immediately by telephone or by return email and permanently delete the 
communication, information and material from any computer, disk drive, diskette 
or other storage device or media. Thank you.


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