|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: restructuring element hierarchy using xslt
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: 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








