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