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

Subject: RE: [xsl] nodes() before and after a string delimiter
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 28 Oct 2009 21:57:12 -0000
First find the text node containing the dash:

<xsl:variable name="textNode" select="text()[contains(.,' - ')][1] "/>

Create a <term> element containing all nodes preceding this text node, plus
the part of the text node before the dash:

<term>
   <xsl:copy-of select="$textNode/preceding-sibling::node()"/>
   <xsl:value-of select="substring-before($textNode, ' - ')"/>
</term>

Create a <definition> element containing everything that follows the dash:

<definition>
   <xsl:value-of select="substring-after($textNode, ' - ')"/> 
   <xsl:copy-of select="$textNode/following-sibling::node()"/>
</definition>

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay  

> -----Original Message-----
> From: Mario Madunic [mailto:Mario_Madunic@xxxxxxxxxxxx] 
> Sent: 28 October 2009 19:25
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] nodes() before and after a string delimiter
> 
> 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>
> 
> I'm used to breaking strings on delimiters and not worrying 
> about any inline elements, but his time the inline elements matter. 
> Is this a for-each-group solution? Break it into two 
> for-each-groups and in the first test for a 
> following-sibling[. = '-'] and the second test for the 
> following-sibling[. = '-']. 
> 
> No need to apply templates at this point a copy-of will suffice.
> 
> Any insight would be appreciated.
> 
> Thanks
> 
> Marijan (Mario) Madunic
> Publishing Specialist
> New Flyer Industries
> 
> --------------------------------------------------------------------
> 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.

Current Thread