|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: restructuring element hierarchy using xslt
Why do I bother giving you a design when someone else gives you the code and tests it? Sigh. Michael Kay > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Dimitre Novatchev > Sent: 29 September 2003 15:23 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: 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 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








