XPath / XSLT包含多个字符串的()

时间:2017-07-26 11:02:57

标签: xml xslt xpath xslt-1.0

contains()是否适用于存储在变量中的多个单词?下面的一个会起作用吗?如果它不起作用,请帮我解决。

<xsl:variable name="games" select="footballvolleyballchesscarrom"/>

<xsl:when test="contains($games,'chess,carrom')">CORRECT</xsl:when>

2 个答案:

答案 0 :(得分:1)

我认为多个变量不适用于contains方法。根据定义:

boolean contains(str1, str2)

str1:可能包含第二个参数的字符串。 str2:可能包含在第一个参数中的字符串。

参考:https://msdn.microsoft.com/en-us/library/ms256195(v=vs.110).aspx

您可以使用或运营商:

<xsl:when test="contains($games,'chess') or contains($games,'carrom')">CORRECT</xsl:when>

答案 1 :(得分:1)

假设您正在寻找子字符串包含的逻辑OR ......

首先,这个select可能是错误的 1

<xsl:variable name="games" select="footballvolleyballchesscarrom"/>

它正在寻找一个名为footballvolleyballchesscarrom的元素。如果您尝试将游戏设置为字符串 footballvolleyballchesscarrom,请将其更改为:

<xsl:variable name="games" select="'footballvolleyballchesscarrom'"/>

然后,使用

XSLT 1.0

<xsl:when test="contains($games,'chess')
             or contains($games,'carrom')">CORRECT</xsl:when>

XSLT 2.0

<xsl:when test="matches($games,'chess|carrom')">CORRECT</xsl:when>

测试$games是否包含多个子字符串中的一个。

1 如果您真的打算从输入XML中选择(可能是多个)元素,则还有另一个XSLT 2.0选项,用于根据一组可能的值测试所选序列。如果您的输入XML是,例如

<games>
  <game>football</game>
  <game>volleyball</game>
  <game>chess</game>
  <game>carrom</game>
</games>

然后是这个模板,

<xsl:template match="/">
  <xsl:variable name="games" select="//game"/>
  <xsl:if test="$games = ('chess','carrom')">CORRECT</xsl:if>
</xsl:template>

会输出CORRECT,因为所选元素的字符串值中至少有chesscarrom