测试某个类型的非null元素是否存在......某处

时间:2008-10-09 15:21:29

标签: xml xslt

我的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之后进行检查,说“任何一个答案元素都有一个非空均值?”。

真的不知道该怎么做。

5 个答案:

答案 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 &gt;= 0">
          ... other code ...
      </xsl:if>
  </xsl:for-each>