Subject: RE: [xsl] How to create a node set that excludes some descendant elements? From: "Aron Bock" <aronbock@xxxxxxxxxxx> Date: Tue, 12 Apr 2005 03:09:35 +0000 |
<xsl:template match="node( ) | @*"> <xsl:if test="name() != 'z' and not (name() = 'y' and preceding::y)"> <xsl:copy> <xsl:apply-templates select="@* | node( )"/> </xsl:copy> </xsl:if> </xsl:template>
From: Rush Manbert <rush@xxxxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] How to create a node set that excludes some descendant elements?
Date: Mon, 11 Apr 2005 16:57:24 -0700
Hi all,
My first post here and I want to start by saying how much I appreciate the big FAQ, the Jeni site, etc. It has all helped me tremendously.
I can't find an answer to this one, though, so here goes...
My XML doc has this basic structure: <a> <b> <c> <!-- This is the section of interest --> </c> </b> </a>
The <c> element can contain any combination of elements <d> through <z>. Elements <y> and <z> have special uses.
I want to create a global variable that contains the result tree fragment contained within element <c>, with the following restrictions:
I only want to include the first <y> element that is contained within <c>, no matter where it occurs. There may be no <y> elements present.
I want to exclude all <z> elements that are contained within <c>, no matter where they occur. Again, there may be none present.
Later on in my stylesheet, I use exslt:node-set() on the variable and process the node set.
For instance, given this source: <a><b><c> <d> <z> <g /> </d> <q> <r> <y /> <z /> </r> <y /> <q> <y> </c></b></a>
I want the selection to contain this: <a><b><c> <d> <g /> </d> <q> <r> <y /> </r> <q> </c></b></a>
(<z> elements are gone, only the first <y> element remains.)
I have tried many variations on the select portion of the variable definition. I can filter the immediate children of <c>, OR the second level children, etc., but I can't seem to come up with anything that handles <y> and <z> appearing at any depth in the descendant tree.
I'm prepared to be humiliated by some obvious solution... Can anyone please help?
Thanks, Rush
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to create a node set , Rush Manbert | Thread | RE: [xsl] How to create a node set , Michael Kay |
Re: [xsl] How to create a node set , Rush Manbert | Date | [xsl] If Current Node Is Ancestor!, Adam J Knight |
Month |