if-statement - XSLT/Xpath:如何找出某个东西是或不是关键(如果)?
问题描述
我在 XSLT 中的代码有问题。我正在使用钥匙功能,在那里我发现钥匙里是否有东西。
<xsl:key name="hlp" match="help" use="@id" />
...
<xsl:if test="key('hlp', @some_id) !=''">
...
</xsl:if>
这是正确的,它给了我我想要的东西,但是我如何做出相反的条件,@some_id 不在关键 hlp 中......我的意思是:
<xsl:if test="key('hlp', @some_id) <!--is equal--> ''">
...
</xsl:if>
XSLT/XPath 中有类似的东西吗?
解决方案
调用key('x', 'y')
时,结果是键等于的节点集'y'
。您可以使用 empty() 函数(在 XSLT 2.0 中)或 not() 函数在 XSLT 1.0 中测试节点集是否为空:
<xsl:if test="not(key('x', 'y'))" version="1.0">...</xsl:if>
<xsl:if test="empty(key('x', 'y'))" version="2.0">...</xsl:if>
或用于逆向测试(测试是否找到了某些东西):
<xsl:if test="key('x', 'y')" version="1.0">...</xsl:if>
<xsl:if test="exists(key('x', 'y'))" version="2.0">...</xsl:if>
通过将结果与字符串进行比较来进行测试是错误的。如果函数的结果是空节点集,则测试key('x','y')=''
和key('x','y')!=''
都将返回 false ;key()
相反,如果key()
函数选择两个节点,一个有内容,另一个没有,那么两个测试都将返回 true。
推荐阅读
- vb.net - 在 VB.Net 中做空任何值
- javascript - React 嵌套地图显示 JSX 在开发中,但不在生产中
- android - 华为应用内购买,4.0版本不支持购买
- c# - 从对象访问 Array(任何元素类型)的元素
- jquery - 调用 jquery ajax 给我一个 405(Method Not Allowed:) 错误
- c# - 为什么 Keyoti 的 Conveyor 有多个远程 URL IP 地址
- angular - 在 dayGridMonth 中设置完整日历的第一天
- linux - 以特定模式打印多个单词
- javascript - 使用“npm react-authorize-net”在 TypeScript 上将 Accept.js 与 NextJs 集成
- c# - 在 asp.net core 2.2 中显示 url slug 而不是 id