如何在XSL中测试缺少的属性?

时间:2009-01-22 13:32:58

标签: xslt xpath

我所拥有的是:

<xsl:variable name="myvar" select=".//spss:category[((not @varName) or @varName=$colVarName) and @text=$series]/spss:cell/@text"/>

应该做的是选择spss:cell的text-Attribute的文本,只要它是spss:category的孩子

  • varName属性,其值等于$colVarName
  • 根本没有varName属性

正在发生什么是关注错误消息(抱歉在这里翻译,所以只是它的要点):

  

预期令牌')'。找到令牌'@'   .//spss:category {((not - &gt; @&lt; - varName)或@ varName = $ colVarName ...

解决了问题!(见下文)

2 个答案:

答案 0 :(得分:10)

好吧,我想我发现了错误:

not必须与括号一起使用,因此不是

(not @varName) or @varName=$colVarName

应该是

not(@varName) or @varName=$colVarName

答案 1 :(得分:2)

确实 - not()是一个函数,它返回与parens之间的任何东西相反的布尔值。如有必要 - 它会将其参数转换为布尔值。在这种情况下,空节点集会自动转换为false,因此如果@varName为您提供空节点集,则not(@varName)将为true。