2011-11-24 200 views
0

的另一部分參考前面一點,我想專注於某些元素並對其進行分析:的XPath 2.0:在一個XPath XPath表達式

... 
<field>aaa</field> 
... 
<field>bbb</field> 
... 
<field>aaa (1)</field> 
... 
<field>aaa (2)</field> 
... 
<field>ccc</field> 
... 
<field>ddd (7)</field> 

我想找到誰是文本內容的元素(除一個可能的枚舉,有獨特之處在於將BBB,CCC和DDD的aboce例如

以下XPath給了我獨特的價值觀:。

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '('))) 

現在我想的程度,一個nd在所有不同的值上執行另一個XPath,這將計算有多少字段以其中任何一個開始,並且檢索那些數量大於1的人。

這些可以是等於該特定值的字段內容價值,或者它開始與價值並且跟隨「(」。問題是在該XPath的第二部分中,我將同時參考該部分本身的上下文和前一個上下文。

在下面的XPath中,我會 - 而不是使用「。」。作爲上下文使用c_outer和c_inner:

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))[count(//field[(c_inner = c_outer) or starts-with(c_inner, concat(c_outer, ' ('))]) > 1] 

我不能使用「。」因爲兩個顯而易見的原因。但是我怎麼能夠從內部表達中的外部表達中引用一個特定的或當前獨特的價值呢?

這甚至可能嗎?

回答

0

XQuery可以做到這一點,例如

for $s 
    in distinct-values(
    //field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '('))) 
    where count(//field[(. = $s) or starts-with(., concat($s, ' ('))]) > 1 
    return $s 
+0

我沒看嘗試carrefully,但我相信你可以使用XPath 2.0有兩個succesive for循環做,這樣的:爲$ S 在不同的值( //場[匹配( (。,'(')),$ y在//字段[(。=。$ s)或開始字段中的標準化空間(。),'\([0-9] \) (。,concat($ s,'('))] return $ s [count($ y)> 1] –