Проверка, существует ли определенный тип ненулевого элемента ... где-то - PullRequest
1 голос
/ 09 октября 2008

У меня есть 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 ]

5 голосов
/ 09 октября 2008

имеют ли какие-либо элементы ответа ненулевое среднее значение? по примеру Робертса

<xs:if test="(count(/answers/answer/mean[not(@xsi:nil)])>0"><xs:if>

EDIT:

<xs:if test="//answer/mean[not(text())]"><xs:if>

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ (перед возвращением домой ...)

<xs:if test="//answer/mean[attribute::xsi:nil]"><xs:if>
2 голосов
/ 09 октября 2008
<xs:if test="count(/answers/answer/mean[@xsi:nil != '1']) > 0">Mean stuff here</xs:if>

Должен делать то, что вы хотите (посчитать, где атрибут xsi: nil не установлен в 1)

1 голос
/ 09 октября 2008

Вот что наконец-то сработало для меня:

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

То есть «существуют ли какие-либо элементы ответа, для которых среднее значение больше нуля». К счастью, я знаю, что среднее значение, если оно есть, фактически всегда будет больше нуля - к сожалению, по этой причине это не обобщенное решение.

Я все еще думаю, что подход, который использовали jasper и workmad3 (проверка атрибута xsi: nil), должен работать, но я не мог получить синтаксис, чтобы ... работать.

Большое спасибо, все.

0 голосов
/ 09 октября 2008

Как насчет этого?

  <xsl:for-each select="/answers/answer">
      <xsl:if test="mean &gt;= 0">
          ... other code ...
      </xsl:if>
  </xsl:for-each>
0 голосов
/ 09 октября 2008

Нечто подобное должно работать. если у вас есть какие-либо средства, он вернет 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...