[英]XPath expression to compute arithmetics on array of nodes
<record>
<node_1>
<value_1_0>5</value_1_0>
<value_1_1>0</value_1_1>
<value_1_2>10</value_1_2>
<value_1_3>8</value_1_3>
</node_1>
.................................
.................................
<node_63>
<value_63_0>1</value_63_0>
<value_63_1>99</value_63_1>
<value_63_2>53</value_63_2>
<value_63_3>5</value_63_3>
</node_63>
</record>
問題陳述:在這兩種情況下如何編寫有效的XPath表達式?
如果任何節點的值都不為零,則需要檢查上一個節點和下一個節點的特定子節點的值是否為非零。 即,如果node_50 / value_50_0不為零,則node49 / value_49_0和node51 / value_51_0也應為非零。 同樣,對於其余情況。
接下來,它應該將備用節點的值相加。 即node_1 / value_1_0 + node_3 / value_1_0 + ... + node_63 / value_1_0。 同樣,對於value_1_1,...,value_63_1,依此類推。
我想知道是否每個索引都有提供計數器變量的“ for循環”,這樣兩種情況的XPath表達式都會很簡單?
偽代碼:
for(i=1; i<64; i++)
for(j=0;j<4;j++)
if (node_i/value_i_j !=0)&& (node_i-1/value_i-1_j !=00)&&(node_i-1/value_i-1_j!=0)
True
else
False
end
end
運用
let $alternate-nodes := /record/*[position() mod 2 = 1]
for $i in (1 to count($alternate-nodes[1]/*))
return
sum($alternate-nodes/*[position() eq $i])
應該做計算總和。 當然,僅當元素名稱確實與輸入中的元素名稱一樣復雜時,才需要使用for $i in
,輸入中每個元素名稱中都有一個或兩個索引號。
為了測試零或非零值,例如
let $nodes := /record/*
for $i in (1 to count($nodes[1]/*))
return every $value in $nodes/*[position() eq $i] satisfies $value != 0
返回布爾值序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.