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' ...
【讨论】:
'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() 读取的外部文档来避免这种情况。
【讨论】:
以上是关于xsl:如果有多个检查或?的主要内容,如果未能解决你的问题,请参考以下文章
c# XDocument:检查特定节点名称是不是存在,如果不添加