我在XSLT中有这样的条件:
<xsl:if test="foo != 1">
<p>This should be shown if foo doesn't equal one</p>
</xsl:if>
foo
在这里是一面旗帜。如果foo
为1或0,则表示正常。但是如果没有定义foo
元素,则条件返回false,就好像foo
等于1一样。
我已将其更改为
<xsl:if test="not(foo = 1)">
<p>This should be shown if foo doesn't equal one</p>
</xsl:if>
它开始像我预期的那样工作:如果没有foo
,条件也是如此。
有人可以解释为什么在XSLT中如此。检查节点是否存在以及没有特定值的最佳方法是什么?
答案 0 :(得分:1)
你的第一个声明说:
if there is a foo element that is not 1
这是真的foo元素必须存在,否则即使根本没有foo元素也是如此
你的第二个声明说:
if there is no foo element that is 1
这是做你想做的事的正确方法,因为如果根本没有foo元素也是如此
答案 1 :(得分:0)
使用以下输入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<foo>1</foo>
</test>
<test>
<foo>0</foo>
</test>
<test>
<a>xxx</a>
</test>
</root>
和以下样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="//test">
<xsl:choose>
<xsl:when test="not(foo[.!=1])">
<p>aaa</p>
</xsl:when>
<xsl:otherwise>
<p>bbb</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出
<?xml version="1.0" encoding="utf-8"?>
<p>aaa</p>
<p>bbb</p>
<p>aaa</p>