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(.,' - ')] "/> 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.