2012-07-20 80 views
1

安裝程序:我正在使用XPath 2.0。但在Altova Stylevision內部,請稍後參閱我的評論。XPath 2.0:在具有當前節點值的第一個元素之前查找不同元素的數量

我有以下XML結構:

<?xml version="1.0" encoding="UTF-8"?> 
    <entries> 
     <bla> 
      <blub>222</blub> 
     </bla> 
     <bla> 
      <blub>222</blub> 
     </bla> 
     <bla> 
      <blub>123</blub> 
     </bla> 
     <bla> 
      <blub>234</blub> 
     </bla> 
     <bla> 
      <blub>123</blub> 
      <!--I want to find the number of distinct elements before the first occurance of a blub element with the same value as the current node - so for this node the result should be one (two times 222 before the first appearance of 123)--> 
     </bla> 
    </entries> 

當解析,我的文件,我想知道在咕嚕咕嚕的每一次出現:的第一次出現之前如何泡殼的許多不同的值是有blub與當前節點具有相同的值。

因此,基本上首先確定第一次發生與當前節點具有相同值的blub的位置,然後計算出之前的不同藍色的數量。

我的問題之一是Altova不支持current()函數。 Quote:「請注意,current()函數是XSLT函數,而不是XPath函數,因此不能用於StyleVision的自動計算和條件模板中。要選擇表達式中的當前節點,請使用for表達式的XPath 2.0。 「

因此,任何解決方案,可以做到無電流()函數將是巨大的;)

謝謝大家!

斯特沃

+0

就像一個小小的評論,我設法計算(distinct-values(../ preceding-sibling :: bla/blub)),但顯然不是從第一個節點開始,具有相同的值當前節點,而是從當前節點開始。以爲我會張貼它的情況下,它可以幫助... – spse 2012-07-20 09:54:40

回答

0

如果需要使用相同的值的第一個節點,你總是可以從頭開始,並與/entries/bla[blub=string()][1]搜索。 (無參數字符串應該返回當前節點的值)

然後你就可以在你的表情插入,並得到

count(distinct-values(/entries/bla[blub=string()][1]/preceding-sibling::bla/blub)) 

如果你需要它的所有blubs,你可以指望它爲所有的他們:

for $x in /entries/bla/blub return count(distinct-values(/entries/bla[blub=string($x)][1]/preceding-sibling::bla/blub)) 

編輯:它可能會慢,執行,如此多的循環。如果Stylevision中的distinct值保留了元素的順序,則值之前的元素數是該不同值序列中某個值的索引。

這樣你就可以計爲一個節點與index-of(distinct-values(/entries/bla/blub), string()) - 1

for $x in /entries/bla/blub return index-of(distinct-values(/entries/bla/blub), $x) - 1 

而如果它可以定義新的變量,你可以設置$ s到distinct-values(/entries/bla/blub)它簡化爲

計數的所有節點
for $x in /entries/bla/blub return index-of($s, $x) - 1 
+0

謝謝你的答案!當使用你的建議時,Altova似乎不支持string()函數:index-of(distinct-values(/ entries/bla/blub),string()) - 1 string()位不返回當前節點的值。但是:對於$ x in。 (不同值(/ entries/bla/blub),$ x)-1的返回索引做到這一點,所以解決方法似乎存在。 – spse 2012-07-20 13:25:07

相關問題