Re: [xsl] restructuring element hierarchy using xslt- complications

Subject: Re: [xsl] restructuring element hierarchy using xslt- complications
From: "james walker" <jameswalkerandy@xxxxxxxxxxx>
Date: Tue, 30 Sep 2003 12:27:16 +0100
When taking this further i have realised that maybe the problem is more complicate dthan i first thought, see u what u think below::
(apologies for the layout, done in hotmail so may look a little shabby)
the xml file looks like this:


<t>
<het position="1">
<entrydata columnnumber="0">
<text>some more text here</text></entrydata>
</het>
<het position="1.1">
<entrydata columnnumber="1">
<text>some more text here</text></entrydata>
</het>
<het position="1.1.1">
<entrydata columnnumber="2">
<text>text here</text></entrydata>
<entrydata columnnumber="3">
<text>more text here</text></entrydata>
<entrydata columnnumber="4">
<text>more text here</text></entrydata>
<entrydata columnnumber="5">
<text>more text here</text></entrydata>
<entrydata columnnumber="6">
<text>more text here</text></entrydata>
<entrydata columnnumber="7">
<text>more text here</text></entrydata>
<entrydata columnnumber="8">
<text>more text here</text></entrydata>
<entrydata columnnumber="9">
<text></text></entrydata>
</het>
<het position="1.1.2">
<entrydata columnnumber="2">
<text>text here</text></entrydata>
<entrydata columnnumber="3">
<text>more text here</text></entrydata>
<entrydata columnnumber="4">
<text>more text here</text></entrydata>
<entrydata columnnumber="5">
<text>more text here</text></entrydata>
<entrydata columnnumber="6">
<text>more text here</text></entrydata>
<entrydata columnnumber="7">
<text>more text here</text></entrydata>
<entrydata columnnumber="8">
<text>more text here</text></entrydata>
<entrydata columnnumber="9">
<text></text></entrydata>
</het>
<het position="2">
<entrydata columnnumber="0">
<text>some more text here</text></entrydata>
</het>
<het position="2.1">
<entrydata columnnumber="1">
<text>some more text here</text></entrydata>
</het>
<het position="2.1.1">
<entrydata columnnumber="2">
<text>text here</text></entrydata>
<entrydata columnnumber="3">
<text>more text here</text></entrydata>
<entrydata columnnumber="4">
<text>more text here</text></entrydata>
<entrydata columnnumber="5">
<text>more text here</text></entrydata>
<entrydata columnnumber="6">
<text>more text here</text></entrydata>
<entrydata columnnumber="7">
<text>more text here</text></entrydata>
<entrydata columnnumber="8">
<text>more text here</text></entrydata>
<entrydata columnnumber="9">
<text></text></entrydata>
</het>
</t>

and i was trying to recode it to nest:


<t> <het position="1"> <entrydata columnnumber="0"> <text>some more text here</text></entrydata> <het position="1.1"> <entrydata columnnumber="1"> <text>some more text here</text></entrydata> <het position="1.1.1"> <entrydata columnnumber="2"> <text>text here</text></entrydata> <entrydata columnnumber="3"> <text>more text here</text></entrydata> <entrydata columnnumber="4"> <text>more text here</text></entrydata> <entrydata columnnumber="5"> <text>more text here</text></entrydata> <entrydata columnnumber="6"> <text>more text here</text></entrydata> <entrydata columnnumber="7"> <text>more text here</text></entrydata> <entrydata columnnumber="8"> <text>more text here</text></entrydata> <entrydata columnnumber="9"> <text></text></entrydata> </het> <het position="1.1.2"> <entrydata columnnumber="2"> <text>text here</text></entrydata> <entrydata columnnumber="3"> <text>more text here</text></entrydata> <entrydata columnnumber="4"> <text>more text here</text></entrydata> <entrydata columnnumber="5"> <text>more text here</text></entrydata> <entrydata columnnumber="6"> <text>more text here</text></entrydata> <entrydata columnnumber="7"> <text>more text here</text></entrydata> <entrydata columnnumber="8"> <text>more text here</text></entrydata> <entrydata columnnumber="9"> <text></text></entrydata> </het> </het> </het> <het position="2"> <entrydata columnnumber="0"> <text>some more text here</text></entrydata> <het position="2.1"> <entrydata columnnumber="1"> <text>some more text here</text></entrydata> <het position="2.1.1"> <entrydata columnnumber="2"> <text>text here</text></entrydata> <entrydata columnnumber="3"> <text>more text here</text></entrydata> <entrydata columnnumber="4"> <text>more text here</text></entrydata> <entrydata columnnumber="5"> <text>more text here</text></entrydata> <entrydata columnnumber="6"> <text>more text here</text></entrydata> <entrydata columnnumber="7"> <text>more text here</text></entrydata> <entrydata columnnumber="8"> <text>more text here</text></entrydata> <entrydata columnnumber="9"> <text></text></entrydata> </het> </het> </het> </t> but still hvaing a meard with it, any suggestions would be appreciated.

also, at the same time i thought that renaming different levelled hets would be a good idea- any het with 1-9 = res, 1.1-1.9 = rol, 1.1.1-1.1.9 = prod,
so it would look like
<t>
<res>
<rol>
<prod>
</prod>
<prod>
</prod>
</rol>
<rol>
<prod>
</prod>
</rol>
</res>
</t>
would i have to create new elements or is there a function to change element names??














From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] restructuring element hierarchy using xslt Date: Mon, 29 Sep 2003 07:23:19 -0700 (PDT)


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


_________________________________________________________________ Get Hotmail on your mobile phone http://www.msn.co.uk/msnmobile


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



Current Thread