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

Subject: Re: [xsl] returning nodes which have a specific child
From: Michael Ludwig <mlu@xxxxxxxxxxxxx>
Date: Wed, 01 Jul 2009 10:20:13 +0200
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