1

我有看起来像的 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 之后进行检查,以说“是否有任何答案元素具有非空平均值?”。

真的不知道该怎么做。

4

5 回答 5

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>
于 2008-10-09T15:55:58.957 回答
2
<xs:if test="count(/answers/answer/mean[@xsi:nil != '1']) > 0">Mean stuff here</xs:if>

应该做你想做的(计算 xsi:nil 属性未设置为 1 的方法)

于 2008-10-09T15:58:39.700 回答
1

这是最终对我有用的方法:

<xsl:if test="//answers/answer/mean>0">

也就是说,“是否存在平均值大于零的答案元素”。幸运的是,我知道平均值(如果有的话)实际上总是大于零——不幸的是,由于这个原因,这不是一个通用的解决方案。

我仍然认为 jasper 和 workmad3 采用的方法(检查 xsi:nil 属性)应该有效,但我无法让语法真正......有效。

非常感谢,大家。

于 2008-10-09T18:01:47.097 回答
0

像这样的东西应该工作。如果您有任何方法,它将返回 true

<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>
于 2008-10-09T15:34:18.813 回答
0

这样的事情呢?

  <xsl:for-each select="/answers/answer">
      <xsl:if test="mean &gt;= 0">
          ... other code ...
      </xsl:if>
  </xsl:for-each>
于 2008-10-09T15:57:39.407 回答