xsl-list
[Top] [All Lists]

Re: Adding hierarchy

2003-10-12 21:23:53
Hi Jim,

Please try the following XSL --

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
        
<xsl:template match="/root">
   <root>
     <xsl:for-each select="*">
       <xsl:if test="name(following-sibling::*[1]) =
'blankLIne' ">
         <xsl:copy-of select="preceding-sibling::*" />
         <xsl:copy-of select="." />
       </xsl:if>
     </xsl:for-each>
               
     <xsl:for-each select="lineGroup">
        <xsl:if test="name(preceding-sibling::*[1]) =
'blankLIne' ">
           <lineGroup type="stanza">
              <xsl:copy-of select="."/> 
              <xsl:copy-of
select="following-sibling::lineGroup" />
           </lineGroup>
        </xsl:if>
     </xsl:for-each>
                
     <xsl:for-each select="lineGroup">
        <xsl:if test="not(name(following-sibling::*[1]) =
'lineGroup') ">
           <xsl:copy-of select="following-sibling::*" />
        </xsl:if>
     </xsl:for-each>
  </root>
</xsl:template>
        
</xsl:stylesheet>

When the above XSL is applied to the XML --
<?xml version="1.0" encoding="UTF-8"?>
<root>
<A>
  <x>123</x>
</A>
<blankLIne />
<lineGroup>
  <line></line>
  <line></line>
</lineGroup>
<lineGroup>
  <line></line>
  <line></line>
  <lineGroup>
    <line></line>
    <line></line>
</lineGroup>
<line></line>
</lineGroup>
<B>
  <y>abc</y>
</B>
</root>

it produces output --
<?xml version="1.0" encoding="UTF-8"?>
<root>
<A>
  <x>123</x>
</A>
<lineGroup type="stanza">
<lineGroup>
   <line/>
   <line/>
</lineGroup>
<lineGroup>
   <line/>
   <line/>
   <lineGroup>
     <line/>
     <line/>
   </lineGroup>
   <line/>
</lineGroup>
</lineGroup>
<B>
  <y>abc</y>
</B>
</root>

I have added structures <root>, <A> and <B> to
illustrate concept..

I hope such a XSL was required ..

Regards,
Mukul


--- Jim_Albright(_at_)wycliffe(_dot_)org wrote:
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



__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

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



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