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