我的XML看起来像
<answers>
<answer>
<question-number>1</question-number>
<value>3</value>
<mean xsi:nil="1" />
</answer>
<answer>
<question-number>2</question-number>
<value>2</value>
<mean>2.3</mean>
</answer>
<answer>
<question-number>3</question-number>
<value>3</value>
<mean xsi:nil="1" />
</answer>
....
</answers>
我正在使用xsl:for-each格式化每个答案。如果存在平均值,我有平均值的图形表示。对于一些可能的答案列表,平均值将始终为空。
在页面底部,我想要一个解释平均值图形表示的图例。但我只想让它出现,如果我实际上显示了一个平均值。所以我希望能够在关闭xsl:for-each之后进行检查,说“任何一个答案元素都有一个非空均值?”。
真的不知道该怎么做。
答案 0 :(得分:5)
任何答案元素都有非空均值吗? 基于罗伯茨的例子
<xs:if test="(count(/answers/answer/mean[not(@xsi:nil)])>0"><xs:if>
编辑:
<xs:if test="//answer/mean[not(text())]"><xs:if>
最后编辑(回家之前......)
<xs:if test="//answer/mean[attribute::xsi:nil]"><xs:if>
答案 1 :(得分:2)
<xs:if test="count(/answers/answer/mean[@xsi:nil != '1']) > 0">Mean stuff here</xs:if>
应该做你想要的(计算xsi:nil属性未设置为1的方法)
答案 2 :(得分:1)
这是最终对我有用的东西:
<xsl:if test="//answers/answer/mean>0">
也就是说,“是否存在平均值大于零的任何答案元素”。幸运的是,我知道平均值(如果有的话)实际上总是大于零 - 不幸的是,由于这个原因,这不是一个通用的解决方案。
我仍然认为jasper和workmad3采用的方法(检查xsi:nil属性)应该有效,但我无法让语法实际上......工作。
非常感谢,所有人。
答案 3 :(得分:0)
这样的事情应该有效。如果你有任何手段它将返回真实
<xs:if test="/answers/answer/mean">You have a mean</xs:if>
我认为这就是你的意思。
编辑:也许这个?
<xs:if test="(count(/answers/answer/mean)==1)">You have a mean<xs:if>
不确定这是否有效,但可能
<xs:if test="/answers/answer/mean != nil">You have a mean</xs:if>
答案 4 :(得分:0)
这样的事情怎么样?
<xsl:for-each select="/answers/answer">
<xsl:if test="mean >= 0">
... other code ...
</xsl:if>
</xsl:for-each>