2015-07-01 61 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> 

以來,我就用不同的值我希望這種通過循環來遍歷一次,但兩次迭代。即使不同值的工作不正常,兩次也沒有意義,因爲XML文檔中存在不同的'tps'實例。任何想法表示讚賞...

+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',這是你使用的語言特性,你的例子都是不同的值(/ summary/results [@count eq $ currentResult]/simulator/host/tps)'''distinct-values(/總結/結果[@count eq $ currentResult]/simulator/host/tps/avg/text())'在一系列節點上調用distinct-values函數,這是第一個在'tps'元素序列中的'第二個是文本節點序列。 –

+0

哎呀對不起 - 我的意思是在所有情況下使用不同值 – eeijlar

+0

好吧,我明白你的意思 - 我如何擁有它,以便它只有一個值時,它有孩子,使它不唯一?換句話說,當xml文檔中有三個'tps'節點時,我只需要返回一個tps。 – eeijlar