2015-07-01 4 views
-1

У меня есть следующий фрагмент кода XSLT:Почему этот цикл XSLT повторяется дважды?

   <xsl:for-each 
        select="distinct-values(/summary/results[@count eq $currentResult]/simulator/host/tps)"> 


        <th> 
         <small> 
          TPS Avg 

          <br></br> 
         </small> 
        </th> 
        <th> 
         <small> 
          TPS 95th%tile 

          <br></br> 
         </small> 
        </th> 

       </xsl:for-each> 

Поскольку я использовал различные стоимостей я бы ожидать, чтобы это итерацию один раз через петлю, но итерирует дважды. Дважды не имеет смысла, даже если отдельные значения не работают должным образом, так как есть отдельные экземпляры «tps» в XML-документе. Любые идеи оценили ...

+2

Рассмотрите возможность публикации минимальных, но полных образцов XML-ввода и XSLT, которые позволяют нам легко воспроизвести проблему. Показывая нам фрагмент XSLT без ввода данных, позволяющий нам увидеть, какие значения, которые вырабатывают фрагменты, не позволяют нам объяснить, что происходит. –

+0

Извините, у меня недостаточно информации. Я был бы признателен за ваши комментарии к ответу, если у вас есть. – eeijlar

ответ

0

distinct-values на узле:

distinct-values(/summary/results[@count eq $currentResult]/simulator/host/tps 

отличается distinct-values на атомном значение:

distinct-values(/summary/results[@count eq $currentResult]/simulator/host/tps/avg/text() 

При использовании узла, дети этого узла есть чтобы быть идентичным для того, чтобы извлечь одну запись из дерева XML.

Рассмотрим следующий пример:

  <tps> 
      <avg>8.99</avg> 
      <percentile>11.0</percentile> 
     </tps> 

     <tps> 
      <avg>8.99</avg> 
      <percentile>11.0</percentile> 
     </tps> 

     <tps> 
      <avg>8.99</avg> 
      <percentile>10.0</percentile> 
     </tps> 

Вы можете подумать, что select-distinct будет возвращать только одну запись для <tps> здесь, но он считает детей в этом случае. В приведенном выше примере есть отдельные узлы: avg и процентили идентичны в двух узлах. Вот почему он дважды зацикливал на каждом.

+0

Нет, это объяснение имеет различные заблуждения, в первую очередь вы пишете 'select-distinct', как если бы это была какая-то особенность языка, хотя такой функции нет. Что касается 'distinct-values', которая является используемой вами функцией языка, то ваши примеры' distinct-values ​​(/ summary/results [@count eq $ currentResult]/simulator/host/tps) 'и' distinct-values ​​(/ summary/results [@count eq $ currentResult]/simulator/host/tps/avg/text()) 'вызывать функцию' distinct-values' в последовательности узлов, первая из которых состоит из последовательности элементов 'tps', второй - на последовательности текстовых узлов. –

+0

oops sorry - я хотел использовать разные значения во всех случаях – eeijlar

+0

ok, я понимаю, что вы имеете в виду - как у меня его есть, чтобы он возвращал только одно значение, когда у него есть дети, которые делают его уникальным? Я хочу, чтобы один tps возвращался другими словами, когда в XML-документе есть три узла tps. – eeijlar

Смежные вопросы