RE: [xsl] only display if subnodes occur more than once

Subject: RE: [xsl] only display if subnodes occur more than once
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Thu, 23 Jun 2005 13:14:47 +0100
> I'm stuck again with my XSL. My XML Structure looks like:
>
> <root>
> 	<sub_a>
> 		<elem_1/>
> 		<elem_2/>
> 		<elem_3/>
> 	</sub_a>
> 	<sub_b>
> 		<elem_1/>
> 		<elem_2/>
> 		<elem_2/>
> 		<elem_2/>
> 		<elem_3/>
> 	</sub_b>
> 	<sub_c>
> 		<elem_1/>
> 		<elem_2/>
> 		<elem_3/>
> 	</sub_c>
> </root>
>
> The thing I want to do is display the element sub_b, because
> it has subnodes which occur more than once (elem_2). I really
> have no idea how to test for this - playing around for nearly
> two hours now. Im using a loop like <xsl:for-each
> select="/root/*"> and the output should look like
>
> sub_b (this is the header)
> elem_2
> elem_2 (these are the 3 values of elem_2)
> elem_2

How about:

<xsl:template match="sub_a|sub_b|sub_c">
  <xsl:variable name="copy"
select="boolean(*/following-sibling::*[local-name() =
preceding-sibling::*/local-name()])"/>

  <xsl:if test="$copy">
    <xsl:copy-of select="."/>
  </xsl:if>
</xsl:template>

cheers
andrew

Current Thread