|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: 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
|
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








