xsl:如果有多个检查或?

Posted

技术标签:

【中文标题】xsl:如果有多个检查或?【英文标题】:xsl:if with multiple checks ors? 【发布时间】:2018-08-08 08:58:33 【问题描述】:

使用以下代码时出现错误,我需要能够将变量与四个或更多值进行比较。

<xsl:if test="normalize-space(@Contract_x0020_Type) = ('Fixed Price Level of Effort','Fixed Unit Price','Firmed Fixed Price','Hybrid')">

我需要能够检查多个值

【问题讨论】:

【参考方案1】:

XSLT/XPath 2.0 及更高版本中允许使用该语法,因此您需要确保使用 XSLT 2 或 3 处理器,例如 Saxon 9、XmlPrime 或 Exselt。如果您使用 XSLT 1 处理器,您需要编写 or 表达式,例如normalize-space(@Contract_x0020_Type) = 'Fixed Price Level of Effort' or normalize-space(@Contract_x0020_Type) = 'Fixed Unit Price' ...

【讨论】:

我仍然无法显示此 Web 部件。要解决此问题,请在 Microsoft SharePoint Foundation 兼容的 html 编辑器(如 Microsoft SharePoint Designer)中打开此网页。如果问题仍然存在,请联系您的 Web 服务器管理员。相关 ID:f8ed4e9e-afd9-3036-4e51-d2f60539350e 看来你在'Hybrid' 之后有一个结束),它没有开口(,这似乎是不必要的,你可以编写一系列or 表达式比较字符串而不需要括号. 谢谢你的工作......你也可以使用 AND 而不是 OR 并且是包含而不是 = 一个选项吗?是否有记录所有这些的指南? XPath 1.0 记录在 w3.org/TR/xpath-10。 ***.com/tags/xslt/info 有很多链接,例如可免费下载的书籍 cranesoftwrights.github.io/books/ptux/index.htm 关于 XSLT 和 XPath。【参考方案2】:

当有几十个值时,另一种有用的方法是

<xsl:variable name="values">
  <value>one</value>
  <value>two</value>
  ...
</xsl:variable>

然后

<xsl:if test="normalize-space(@xxxx) = exslt:node-set($values/value)">...

XSLT 1.0 允许与一组节点进行比较,但不能与一组字符串进行比较(因为在 1.0 中没有字符串集这样的东西)。唯一的问题是,如果您想处理变量的内容,则需要使用讨厌的 exslt:node-set() 扩展函数 - 如果需要,可以使用使用 document() 读取的外部文档来避免这种情况。

【讨论】:

@pinkstonmatt 我的代码中没有 AND,所以无论你尝试什么都不是我给你的。因为我不知道你的代码是什么,你也没有告诉我错误是什么,所以很难提供帮助。

以上是关于xsl:如果有多个检查或?的主要内容,如果未能解决你的问题,请参考以下文章

如果数据库中的值为 1,则检查 XSL 复选框显示

c# XDocument:检查特定节点名称是不是存在,如果不添加

与 Xsl 连接

在 XSLT 中有 URL 时使用 fop 和 XSL 生成 PDF

使用xsl替换字符串的前2个字符

如何使用 XSL 检查是不是存在外部文件?