Subject: RE: [xsl] restructuring element hierarchy using xslt From: "Michael Kay" <mhk@xxxxxxxxx> Date: Mon, 29 Sep 2003 18:17:24 +0100 |
The normal <xsl:apply-templates/> processes the children in the XML tree. All that you need is an <xsl:apply-templates that processes the children in the logical tree. Start by processing the top level elements: <xsl:apply-templates select="het[string-length(@position)=1]"/> And when you process a <het> element, process it's logical children. These are the nodes whose @position (a) starts with the @position of the current node, and (b) contain one more "." than the @position of the current node: <xsl:template match="het"> <xsl:copy> <xsl:apply-templates select="following-sibling::het[ starts-with(@position, current()/@position) and number-of-dots(@position) = number-of-dots(current()/@position)+1]"/> </xsl:copy> </xsl:template> Here number-of-dots(X) should be expanded as: string-length(X) - string-length(translate(X, '.', '')) Untested. Michael Kay > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > james walker > Sent: 29 September 2003 13:00 > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] restructuring element hierarchy using xslt > > > 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. > > _________________________________________________________________ > Get Hotmail on your mobile phone http://www.msn.co.uk/msnmobile > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] restructuring element hie, Americo Albuquerque | Thread | Re: [xsl] restructuring element hie, Dimitre Novatchev |
Re: [xsl] how to import access data, Rick Taylor | Date | [xsl] defaut xslt stylesheet for IE, Jiang, Peiyun |
Month |