2016-02-15 3 views
1

Я пытаюсь использовать contains(), где я хочу отображать значение узла только тогда, когда он не содержит числа, но я получаю все значения узлов в результате. Ниже приведен мой код и образец XML. Мой код выглядит следующим образом: Пожалуйста, дайте мне знать, где я делаю неправильно.XSLT содержит() не работает

мой код:

 <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

Вы не можете сделать это таким образом. проверяет, содержит ли первый аргумент 2 аргумент полностью. Например, ваше тестовое выражение вернет true для abc1234567890, но false для abc123.

Вместо использования вы можете использовать translate(), чтобы заменить числовые символы в строке ввода пустым, а затем сравнить результат с исходной входной строкой. Если оба значения одинаковы, то это означает, что строка ввода не содержит числовых символов.

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

большое спасибо за объяснение и решение. – Shweta

Смежные вопросы