[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
|