【问题标题】:XPath/XSLT contains() for multiple stringsXPath/XSLT contains() 用于多个字符串
【发布时间】:2017-07-26 11:02:57
【问题描述】:

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

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

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

【问题讨论】:

  • 您的变量声明不正确。 @select 中的字符串必须被引用,否则将尝试匹配具有该名称的元素。你可以使用 XSLT-2.0 吗?在这里使用正则表达式进行匹配会更简单。

标签: xml xslt xpath xslt-1.0


【解决方案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 之一。

【讨论】:

  • 当然,如果您的意图是它必须包含两个单词,那么您可以在第一个解决方案中将“or”替换为“and”。你实际上并没有说你的要求是什么。
  • 让我们从 OP 那里听听,Kay 博士 :)
【解决方案2】:

我认为多个变量不适用于 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多