Re: [xsl] XSLT 2.0 contains question

Subject: Re: [xsl] XSLT 2.0 contains question
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Mon, 09 Apr 2007 21:40:38 +0200
David Carver wrote:
Under XSLT 1.0, I can do the following to filter out any xsd:element that has a xsd:documentation element that has the word "Deprecated" in it.

<xsl:template match="xsd:schema">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each select="xsd:element | xsd:complexType">
<xsl:if test="count(xsd:annotation[contains(xsd:documentation, 'Deprecated')]) = 0">
<xsl:apply-templates select="."/>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>



However, under XSLT 2.0, I get an error because contains can't take a more than xsd:documentation element. What is correct way to handle this under XSLT 2.0.



I suppose you mean: fn:contains does not take a sequence of nodes as its first argument. You should specify precisely what you want, so either:


(: first xsd:documentation :)
xsd:documentation[1]

or:

(: all xsd:documentation concatenated :)
string-join(xsd:documentation, '')

or (better):

(: all xsd:annotation having at least one xsd:documentation with 'Deprecated' :)
xsd:annotation[xsd:documentation[contains(., 'Deprecated')]]


HtH,

Cheers,
-- Abel Braaksma

Current Thread