[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] restructuring element hierarchy using xslt


Subject: RE: [xsl] restructuring element hierarchy using xslt
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 29 Sep 2003 18:20:42 +0100

Why do I bother giving you a design when someone else gives you the code
and tests it?

Sigh.

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Dimitre Novatchev
> Sent: 29 September 2003 15:23
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] restructuring element hierarchy using xslt 
> 
> 
> 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:variable name="Digits" select="1234567890"/>
>  
>  <xsl:template match="/*">
>   <t>
>    <xsl:apply-templates 
>     select="het[not(contains(@position, '.'))]"/>
>    </t>
>  </xsl:template>
>   
>   <xsl:template match="het">
>     <xsl:copy>
>       <xsl:copy-of select="@*"/>
>       <xsl:apply-templates 
>        select="../het[starts-with(@position, current()/@position)
>                      and
>                       string-length(translate(@position, 
>                                               $Digits, 
>                                               ''
>                                               )
>                                    )
>                       =
>                        1 + 
> string-length(translate(current()/@position, 
>                                                    $Digits, 
>                                                   ''
>                                                   )
>                                          )
>                      ]"/>
>     </xsl:copy>
>   </xsl:template>
> </xsl:stylesheet>
> 
> 
> When applied to your source.xml:
> 
> <t>
>   <het position="1"></het>
>   <het position="1.1"></het>
>   <het position="1.1.1"></het>
>   <het position="1.1.2"></het>
>   <het position="1.2"></het>
>   <het position="1.2.1"></het>
>   <het position="2"></het>
>   <het position="2.1"></het>
>   <het position="2.1.1"></het>
> </t>
> 
> produces the wanted result:
> 
> 
> <t>
>    <het position="1">
>       <het position="1.1">
>          <het position="1.1.1"/>
>          <het position="1.1.2"/>
>       </het>
>       <het position="1.2">
>          <het position="1.2.1"/>
>       </het>
>    </het>
>    <het position="2">
>       <het position="2.1">
>          <het position="2.1.1"/>
>       </het>
>    </het>
> </t>
> 
> 
> =====
> Cheers,
> 
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
> 
> 
> 
> > I have an xml document like this:
> > 
> > <het position="1"></het>
> > <het position="1.1"></het>
> > <het position="1.1.1"></het>
> > <het position="1.1.2"></het>
> > <het position="1.2"></het>
> > <het position="1.2.1"></het>
> > <het position="2"></het>
> > <het position="2.1"></het>
> > <het position="2.1.1"></het>
> > 
> > and i was trying to get it to look like this:
> > 
> > <het position="1">
> >  <het position="1.1">
> >   <het position="1.1.1">
> >   </het>
> >   <het position="1.1.2">
> >   </het>
> >  </het>
> >  <het position="1.2">
> >   <het position="1.2.1">
> >   </het>
> >  </het>
> > </het>
> > <het position="2">
> >  <het position="2.1">
> >   <het position="2.1.1">
> >   </het>
> >  </het>
> > </het>
> > 
> > In other words make it nested. I can get the first set of  elements 
> > out
> > by doing a contains() function in a predicate (<xsl:template 
> > match="het[contains(@position, '.')=false]">) but i am 
> having a problem 
> > with template matching, i know i can't put a template match 
> within a 
> > template match and this is causing me a bit of trouble.
> 
> 
> 
> __________________________________
> 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


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



Current Thread
Keywords