xsl-list
[Top] [All Lists]

Re: Adding hierarchy

2003-10-12 21:31:14
This transformation:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kLGroup" match="lineGroup"
  use="generate-id(preceding-sibling::blankLine[1])"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="blankLine">
   <lineGroup type="stanza">
     <xsl:copy-of select="key('kLGroup', generate-id())"/>
   </lineGroup>
  </xsl:template>

  <xsl:template match="lineGroup"/>

</xsl:stylesheet>

when applied on this source.xml:

<text>
  <blankLine/>
  <lineGroup>
    <line> </line>
    <line> </line>
  </lineGroup>
  <lineGroup>
    <line> </line>
    <line> </line>
    <lineGroup>
      <line> </line>
      <line> </line>
    </lineGroup>
    <line> </line>
  </lineGroup>
  <p/>
  <blankLine/>
  <lineGroup>
    <line> </line>
    <line> </line>
  </lineGroup>
  <lineGroup>
    <line> </line>
    <line> </line>
    <lineGroup>
      <line> </line>
      <line> </line>
    </lineGroup>
    <line> </line>
  </lineGroup>
  <p/>
  <blankLine/>
  <lineGroup>
    <line> </line>
    <line> </line>
  </lineGroup>
  <lineGroup>
    <line> </line>
    <line> </line>
    <lineGroup>
      <line> </line>
      <line> </line>
    </lineGroup>
    <line> </line>
  </lineGroup>
  <p/>
</text>

produces the wanted result:

<text>
   <lineGroup type="stanza">
      <lineGroup>
         <line/>
         <line/>
      </lineGroup>
      <lineGroup>
         <line/>
         <line/>
         <lineGroup>
            <line/>
            <line/>
         </lineGroup>
         <line/>
      </lineGroup>
   </lineGroup>
   <p/>
   <lineGroup type="stanza">
      <lineGroup>
         <line/>
         <line/>
      </lineGroup>
      <lineGroup>
         <line/>
         <line/>
         <lineGroup>
            <line/>
            <line/>
         </lineGroup>
         <line/>
      </lineGroup>
   </lineGroup>
   <p/>
   <lineGroup type="stanza">
      <lineGroup>
         <line/>
         <line/>
      </lineGroup>
      <lineGroup>
         <line/>
         <line/>
         <lineGroup>
            <line/>
            <line/>
         </lineGroup>
         <line/>
      </lineGroup>
   </lineGroup>
   <p/>
</text>


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

<Jim_Albright(_at_)wycliffe(_dot_)org> wrote in message
news:OFEB5B1B12(_dot_)8FD1C074-ON85256DBD(_dot_)00499DAA-85256DBE(_dot_)000A4F05(_at_)notes(_dot_)sil(_dot_)org(_dot_)(_dot_)(_dot_)
Thank you for help in the past. Next question.

Starting with this piece, I want to add a wrapper around a whole set of
lineGroup elements

<blankLIne>
<lineGroup>
        <line></line>
        <line></line>
</lineGroup>
<lineGroup>
        <line></line>
        <line></line>
        <lineGroup>
                <line></line>
                <line></line>
        </lineGroup>
        <line></line>
</lineGroup>
<p>.......or any non lineGroup element .....

should change to
<lineGroup type="stanza">
        <lineGroup>
                <line></line>
                <line></line>
        </lineGroup>
        <lineGroup>
                <line></line>
                <line></line>
                <lineGroup>
                        <line></line>
                        <line></line>
                </lineGroup>
                <line></line>
        </lineGroup>
</lineGroup>
<p>.......or any non lineGroup element .....
So a blankLine as preceding-sibling to lineGroup is the trigger to then
process all following-sibling lineGroups.

A 2.0 solution is welcome if needed.


Jim Albright
704 843-0582
Wycliffe Bible Translators



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>