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 を使用して各回答をフォーマットしています。平均値が存在する場合、平均値をグラフィカルに表現します。回答の潜在的なリストの中には、平均が常に null になるものがあります。

ページの下部に、平均のグラフ表示を説明する凡例を配置したいと思います。しかし、実際に平均を表示した場合にのみ表示したいのです。したがって、xsl:for-each を閉じた後、「回答要素のいずれかが null 以外の平均値を持っているか?」というチェックを実行できるようにしたいと考えています。

それを行う方法が本当にわかりません。

4

5 に答える 5

5

平均値が null でない回答要素はありますか? ロバーツの例に基づく

<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 に答える