|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: only display if subnodes occur more than once
> Anrew Welch wrote:
>
> > <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>
>
> <xsl:if test="boolean(*/following-sibling::*[local-name() =
> preceding-sibling::*/local-name()])"> works fine for my needs - thank
> you very much! Could'nt have done it without you!
>
But it's probably O(n^3) in the number of siblings, so don't try it if
there's a large fanout.
Also the original post asked for all the elem_2's to be output: this code
surely omits the last one?
A 2.0 solution that's likely to be more efficient is
<xsl:for-each-group select="*" group-by="local-name()">
<xsl:if test="current-group()[2]">
<xsl:copy-of select="current-group()"/>
</xsl:if>
</xsl:for-each>
(However, this doesn't preserve the order of the children. The OP didn't say
whether that was a requirement.)
Michael Kay
http://www.saxonica.com/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








