xsl-list
[Top] [All Lists]

Re: Flattening parts of a document heirarchy

2003-10-31 06:02:17
This transformation:

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

 <xsl:strip-space elements="*"/>

 <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:template match="/*">
   <xsl:copy>
     <xsl:copy-of select="@* | node()[not(self::sec)]"/>
    <xsl:for-each select=".//sec">
      <section id="s{position()}"
               level="{count(ancestor::sec)+1}">
        <xsl:copy-of select="node()[not(self::sec)]"/>
      </section>
    </xsl:for-each>
   </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

when applied on your source.xml:

<doc>
      text text text
  <sec id="sec1">
    <p>text1text1text1</p>
    <sec id="sec1.1">
      <p>text2 text2 text2</p>
    </sec>
    <p>text3 text3 text3</p>
  </sec>
</doc>

produces the correct resulting flattenned document:

<doc>
      text text text
  <section id="s1" level="1">
      <p>text1text1text1</p>
      <p>text3 text3 text3</p>
   </section>
   <section id="s2" level="2">
      <p>text2 text2 text2</p>
   </section>
</doc>


=====
Cheers,

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



"David Holden" <dh(_at_)iucr(_dot_)org> wrote in message
news:200310311122(_dot_)16235(_dot_)dh(_at_)iucr(_dot_)org(_dot_)(_dot_)(_dot_)
On Friday 17 Oct 2003 2:10 pm, David Holden wrote:
I know there are faq's on flattening but as  newbie i'm  a little
unclear
on this.

My problem:

incoming document is something like this:

<doc>
    text text text
    <sec id="sec1">
       <p>text1text1text1</p>
        <sec id="sec1.1">
           <p>text2 text2 text2</p>
        </sec>
       <p>text3 text3 text3</p>
   </sec>
</doc>

i.e <sec> tags are nested to arbitary level.

I need

<doc>
   text text text
   <section id="s1" level="1">
       <p>text1 text1 text1</p>
   </section>
   <section id="s2" level="2">
        <p>text text text</p>
   </section>
   <section id="s3" level="1">
       <p>text3 text3 text3</p>
   </section>
</doc>


 thanks in advance,

 Dave.

No replies to this, can XSLT really not do this? I've decided to address
this
by pre-filtering using SAX where this kind of transform is pretty easy.

 Dave.


-- 
Dr. David Holden. (Systems Developer)
Crystallography Journals Online: <http://journals.iucr.org>

Thanks in advance:-
Please avoid sending me Word or PowerPoint attachments.
See: <http://www.fsf.org/philosophy/no-word-attachments.html>

UK Privacy (R.I.P)  : http://www.stand.org.uk/commentary.php3
Public GPG key available on request.
-------------------------------------------------------------

 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>