Subject: Re: [xsl] restructuring element hierarchy using xslt From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Mon, 29 Sep 2003 07:23:19 -0700 (PDT) |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] restructuring element hie, Michael Kay | Thread | RE: [xsl] restructuring element hie, Michael Kay |
[xsl] Generating a Set of HTML-File, peter_caspers | Date | [xsl] how to import access database, puja thakral |
Month |