|
Subject: RE: [xsl] restructuring element hierarchy using xslt From: "Michael Kay" <mhk@xxxxxxxxx> Date: Mon, 29 Sep 2003 18:17:24 +0100 |
The normal <xsl:apply-templates/> processes the children in the XML
tree. All that you need is an <xsl:apply-templates that processes the
children in the logical tree.
Start by processing the top level elements:
<xsl:apply-templates select="het[string-length(@position)=1]"/>
And when you process a <het> element, process it's logical children.
These are the nodes whose @position (a) starts with the @position of the
current node, and (b) contain one more "." than the @position of the
current node:
<xsl:template match="het">
<xsl:copy>
<xsl:apply-templates select="following-sibling::het[
starts-with(@position, current()/@position) and
number-of-dots(@position) =
number-of-dots(current()/@position)+1]"/>
</xsl:copy>
</xsl:template>
Here number-of-dots(X) should be expanded as:
string-length(X) - string-length(translate(X, '.', ''))
Untested.
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> james walker
> Sent: 29 September 2003 13:00
> 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 -> |
|---|---|---|
| RE: [xsl] restructuring element hie, Americo Albuquerque | Thread | Re: [xsl] restructuring element hie, Dimitre Novatchev |
| Re: [xsl] how to import access data, Rick Taylor | Date | [xsl] defaut xslt stylesheet for IE, Jiang, Peiyun |
| Month |