[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Filtering elements of a tree
Subject: Re: [xsl] Filtering elements of a tree From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Wed, 8 May 2002 09:43:23 +0100 |
Hi Venkatesh, > I want to select the element artist with id=7 and its parent, grand > parent and so on. It's easiest to do this with a top-down transformation, only creating a TreeNode element for an element that you encounter if it has an element with id="7" somewhere in its descendants (or rather, if it is an ancestor of an element with id="7". First, you should hold all the elements that are ancestors of, or are themselves, elements with an id of 7, in a global variable, so that you only have to search through the tree for them once: <xsl:variable name="selected" select="//*[@id = '7']/ancestor-of-self::*" /> Then you need a template that matches any element: <xsl:template match="*"> ... </xsl:template> and tests to see whether it is one of the selected nodes: <xsl:template match="*"> <xsl:if test="$selected[generate-id() = generate-id(current())]"> ... </xsl:if> </xsl:template> If it is, then you want to create a TreeNode element, with copied attributes from this one, and move on to process its child elements in the same way: <xsl:template match="*"> <xsl:if test="$selected[generate-id() = generate-id(current())]"> <TreeNode> <xsl:copy-of select="@*" /> <xsl:apply-templates select="*" /> </TreeNode> </xsl:if> </xsl:template> Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Filtering elements of a tree, Venkatesh Sutrave | Thread | RE: [xsl] Filtering elements of a t, Jarno . Elovirta |
Re: [xsl] question about javascript, David Carlisle | Date | RE: [xsl] Filtering elements of a t, Jarno . Elovirta |
Month |