簡體   English   中英

XPath表達式以計算節點數組上的算術

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM