Re: [xsl] returning nodes which have a specific child

Subject: Re: [xsl] returning nodes which have a specific child
From: jim mcgovern <jim.mcgovern2@xxxxxxxxxxxxxx>
Date: Thu, 2 Jul 2009 09:21:41 +0100
Hi Michael

Thanks very much for that!  Worked a treat.

I'm relatively new to xsl and to be honest a lot of it seems like a
black art.  Can you briefly describe what your solution does?  I feel
daft for asking seeing as it's 13 lines long but I'd have never come
up with that.

Many thanks

Jim

On Wed, Jul 1, 2009 at 9:20 AM, Michael Ludwig<mlu@xxxxxxxxxxxxx> wrote:
> jim mcgovern schrieb:
>
>> What I need to do is return a set of nodes that contain a certain
>> child node.  In the case below I need to return all the nodes that
>> contain a child node which have a name of "CONTENT".
>
>> And what I need to end up with is:-
>>
>> <folder name="dir2" id="x2">
>>        <folder name="dir5" id="x5">
>>                <folder name="dir7" id="x7">
>>                </folder>
>>        </folder>
>> </folder>
>
> Hi Jim,
>
> the following seems to work. Should be rather self-explanatory; if not,
> feel free to come back with any questions you might have.
>
> <xsl:stylesheet version="1.0"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>
>  <xsl:template match="@*|node()"><!-- identity template -->
>    <xsl:copy>
>      <xsl:apply-templates select="@*|node()"/>
>    </xsl:copy>
>  </xsl:template>
>
>  <xsl:template match="*" priority="-0.4" ><!-- skip unwanted -->
>    <xsl:apply-templates select="*"/>
>  </xsl:template>
>
>  <xsl:template match="*[*[@name='CONTENT']]" ><!-- keep wanted -->
>    <xsl:copy>
>      <xsl:apply-templates select="@*|node()"/>
>    </xsl:copy>
>  </xsl:template>
>
> </xsl:stylesheet>
>
> Michael Ludwig

Current Thread