Altova Mailing List Archives


Re: [xsl] Trying to select sibling nodes between two nodes

From: "G. Ken Holman" <gkholman@----------------.--->
To: xsl-list@-----.------------.---
Date: 1/8/2010 10:21:00 PM
At 2010-01-08 16:12 -0600, Ylvisaker, Steve wrote:
>I have some unfortunate xml that I am trying to parse:
>
><label>first text<br/>second<emphasis>bold</emphasis> text<br/>third 
>text</label>
>
>I need to transform this into:
>
><label>
>  <flowPara>first text</flowPara>
>  <flowPara>second<emphasis>bold</emphasis> text</flowPara>
>  <flowPara>third text</flowPara>
></label>
>
>Basically I need to select nodes between nodes in a "flat" data 
>progression. I can think of some ugly approaches that would 
>accomplish this but it seems I should be able to use "<<" and ">>" 
>to select nodes between occurrences of <br/>. However, no matter how 
>I attempt to use these operators the result is a syntax error with 
>"<" being illegal.
>
>Can anyone point me to an example of how I can unflatten this xml?

This has come up before and it comes up in the classroom.  What you 
need to use here is grouping, creating new groups for every <br> and 
encapsulating everything in the group except <br> elements (which are 
the first in those groups that have a <br> and possibly not present 
in the very first group, as is true with your data).

I hope the working answer below helps.

. . . . . . . . . Ken

T:\ftemp>type steve.xml
<label>first text<br/>second<emphasis>bold</emphasis> text<br/>third 
text</label
 >
T:\ftemp>xslt2 steve.xml steve.xsl
<?xml version="1.0" encoding="UTF-8"?>
<label>
    <flowPara>first text</flowPara>
    <flowPara>second<emphasis>bold</emphasis> text</flowPara>
    <flowPara>third text</flowPara>
</label>
T:\ftemp>type steve.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 version="2.0">

<xsl:output indent="yes"/>

<xsl:template match="label">
   <label>
     <xsl:for-each-group select="node()" group-starting-with="br">
       <flowPara>
         <xsl:copy-of select="current-group()[not(self::br)]"/>
       </flowPara>
     </xsl:for-each-group>
   </label>
</xsl:template>

</xsl:stylesheet>
T:\ftemp>


--
UBL and Code List training:      Copenhagen, Denmark 2010-02-08/10
XSLT/XQuery/XPath training after http://XMLPrague.cz 2010-03-15/19
XSLT/XQuery/XPath training:   San Carlos, California 2010-04-26/30
Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman                 mailto:gkholman@C...
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
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@l...>
--~--

Disclaimer

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.