Subject: RE: [xsl] matching elements of a list From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 8 May 2007 09:37:40 +0100 |
This is a recursive query, and is therefore beyond the scope of XPath alone: it needs recursive functions. But it's easy in XSLT (untested!): <xsl:key name="k" match="ln" use="@s"/> <xsl:function name="my:children" as="xs:string*"> <xsl:param name="parent" as="xs:string"/> <xsl:sequence select="key('k', $parent)/@d"/> </xsl:function> <xsl:function name="my:descendants" as="xs:string*"> <xsl:param name="parent" as="xs:string"/> <xsl:variable name="children" select="my:children($parent)"/> <xsl:sequence select="$children, for $c in $children return my:descendants($c)"/> </xsl:function> A bit harder if you need to add a check for cycles, but still doable. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Rolf Schumacher [mailto:mailinglist@xxxxxxxxx] > Sent: 08 May 2007 06:01 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] matching elements of a list > > do I have reached the limits of xpath? > > if several linked lists are contained in one document how to > match all nodes belonging to a specific start node? > > The following example may illustrate my question: > > Input: > <root> > <st ix="a"/> > <st ix="b"/> > <el ix="c"/> > <el ix="d"/> > <el ix="e"/> > <el ix="f"/> > <el ix="g"/> > > <ln s="a" d="g"/> > <ln s="g" d="f"/> > > <ln s="b" d="e"/> > <ln s="e" d="c"/> > <ln s="c" d="d"/> > </root> > > disired output: > > a: g f > b: e c d > > How to accomplish that by XSLT (2.0)? > Even your answer "I know for sure that there is not elegant way" > or "You got to extend the processor by some Java function" > would help.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] matching elements of a li, Rolf Schumacher | Thread | Re: [xsl] matching elements of a li, Rolf Schumacher |
Re: [xsl] matching elements of a li, George Cristian Bina | Date | [xsl] PHP XSL adds Content-Type met, Martynas Jusevicius |
Month |