|
Subject: RE: [xsl] restructuring element hierarchy using xslt From: Americo Albuquerque <melinor@xxxxxxxx> Date: Mon, 29 Sep 2003 17:46:57 +0100 |
Hi
This is agrouping problem, you are grouping by @position, each '.'
adding a new group level.
You can use the Meunchian grouping to obtain your desired output
Each key defines a new group level, if you want a new level you'll have
to add a new key and a new template with mode="level[next level]"
Stylesheet:
<xsl:key match="het" name="hets"
use="substring-before(concat(@position,'.'),'.')"/>
<xsl:key match="het" name="hets"
use="concat(substring-before(concat(@position,'.'),'.'),'-',substring-be
fore(concat(substring-after(@position,'.'),'.'),'.'))"/>
<xsl:key match="het" name="hets"
use="concat(substring-before(concat(@position,'.'),'.'),'-',substring-be
fore(concat(substring-after(@position,'.'),'.'),'.'),'-',substring-befor
e(concat(substring-after(substring-after(@position,'.'),'.'),'.'),'.'))"
/>
<xsl:template match="doc">
<xsl:apply-templates mode="level1"
select="het[generate-id()=generate-id(key('hets',substring-before(concat
(@position,'.'),'.')))][not(generate-id()=generate-id(current()))]"/>
</xsl:template>
<xsl:template match="het" mode="level1">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="level2"
select="key('hets',substring-before(concat(@position,'.'),'.'))[generate
-id()=generate-id(key('hets',concat(substring-before(concat(@position,'.
'),'.'),'-',substring-before(concat(substring-after(@position,'.'),'.'),
'.'))))][not(generate-id()=generate-id(current()))]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="het" mode="level2">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="level3"
select="key('hets',concat(substring-before(concat(@position,'.'),'.'),'-
',substring-before(concat(substring-after(@position,'.'),'.'),'.')))[gen
erate-id()=generate-id(key('hets',concat(substring-before(concat(@positi
on,'.'),'.'),'-',substring-before(concat(substring-after(@position,'.'),
'.'),'.'),'-',substring-before(concat(substring-after(substring-after(@p
osition,'.'),'.'),'.'),'.'))))][not(generate-id()=generate-id(current())
)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="het" mode="level3">
<xsl:copy>
<xsl:copy-of select="@*"/>
</xsl:copy>
</xsl:template>
Regards,
Americo Albuquerque
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> james walker
> Sent: Monday, September 29, 2003 1:00 PM
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] restructuring element hierarchy using xslt
>
>
> 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.
>
> _________________________________________________________________
> Get Hotmail on your mobile phone http://www.msn.co.uk/msnmobile
>
>
> 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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] restructuring element hierarc, james walker | Thread | RE: [xsl] restructuring element hie, Michael Kay |
| Re: [xsl] how to import access data, Brook Ellingwood | Date | Re: [xsl] how to import access data, puja thakral |
| Month |