我发现,虽然这个测试返回true:XSLT: “测试” 结果混乱
test="string-length(foo) = 0"
然而,出于某种原因,这两个测试都返回false:
test="foo = ''"
test="foo = null"
任何想法可能会发生什么?是否还有其他一些foo可能会导致长度为0的状态,但仍然不等于“'或null?
另外 - 如果我输出:
X<xsl:value-of select="foo" />X
outputs: XX
我发现,虽然这个测试返回true:XSLT: “测试” 结果混乱
test="string-length(foo) = 0"
然而,出于某种原因,这两个测试都返回false:
test="foo = ''"
test="foo = null"
任何想法可能会发生什么?是否还有其他一些foo可能会导致长度为0的状态,但仍然不等于“'或null?
另外 - 如果我输出:
X<xsl:value-of select="foo" />X
outputs: XX
如果foo是一个空节点集,那么string(foo)
是“”,并且string-length(foo)
是零,但foo = ''
是false。 XPath充满了惊喜。
解释是foo = ""
并不意味着string(foo) = ""
正如您所期望的那样,而是some $F in foo satisfies $F = ""
(您可以在XPath 2.0中完整编写)。如果foo是空集,那么存在性测试显然是错误的。
非常简洁。谢谢! – eejai42
那么,如果你做test="foo = null"
你比较上下文节点上下文节点的null
子元素(S)的foo
子元素(一个或多个)。
见[http://stackoverflow.com/questions/825831/check-if-a-string-is-null-or-empty-in-xslt][1] [1]: http://stackoverflow.com/questions/825831/check-if-a-string-is-null-or-empty-in-xslt – nrathaus
谢谢 - 我发现刚才那篇文章完全相同。具体来说,我的误解是假设not(foo)和foo = null会返回相同的结果,显然这是不正确的。如果该元素不存在,则不等于null。相反,测试丢失的元素必须用not(foo)进行测试。谢谢! – eejai42
我猜在XSLT中没有_null_,请阅读Martin Honnen的回答。 – Fernando