XSLT包含()不起作用

时间:2016-02-15 05:26:42

标签: xml xslt-1.0

我正在尝试使用contains(),其中我只想在不包含数字时显示节点值,但我得到结果中的所有节点值。下面是我的代码和示例XML。我的代码如下:请告诉我我在哪里做错了。

我的代码:

     <xsl:variable name="restricted_characters" select="1234567890"/>
        <xsl:for-each select="test/a">
        <xsl:if test="not(contains(. , $restricted_characters))">
         <xsl:value-of select="position()" />:
         <xsl:value-of select="." />
        </xsl:if>
        </xsl:for-each>

XML:

    <test>
    <a>abc11</a>
    <a>123</a>
    <a>abc</a>
    <a>abc2</a>
    <a>abc3</a>
    <a>abc</a>
    </test>  

1 个答案:

答案 0 :(得分:1)

你不能这样做。 contains()检查第一个参数是否包含第二个参数完全。例如,您的测试表达式将为abc1234567890返回 true ,但为abc123返回 false

您可以使用contains()将输入字符串中的数字字符替换为空,而不是使用translate(),然后将结果与原始输入字符串进行比较。如果两者相同,则表示输入字符串不包含任何数字字符。

<xsl:if test="translate(. , $restricted_characters, '') != .">