2014-03-04 88 views
0

我有要求在輸入xml中找到重複的元素,並將單個記錄的數量作爲輸出進行求和。Xpath總結重複元素

輸入XML是:

<Input> 
    <A1> 
     <NAME>A</NAME> 
     <QTY>1</QTY> 
    </A1> 
    <A1> 
     <NAME>A</NAME> 
     <QTY>2</QTY> 
    </A1> 
    <A2> 
     <NAME>B</NAME> 
     <QTY>3</QTY> 
    </A2> 
    <A1> 
     <NAME>A</NAME> 
     <QTY>5</QTY> 
    </A1> 
    <A2> 
     <NAME>b</NAME> 
     <QTY>8</QTY> 
    </A2> 
</Input> 

輸出應該如下:

<Input> 
    <A1> 
     <NAME>A</NAME> 
     <QTY>8</QTY> 
    </A1> 
    <A2> 
     <NAME>B</NAME> 
     <QTY>11</QTY> 
    </A2> 
</Input> 

回答

1

如果要總結的型號幾個節點可以使用XPath sum()功能。這增加了你的所有QTY節點:

sum(//QTY) 

如果你只是想補充一點,低於A1的節點上,您可以使用:

sum(/Input/A1/QTY) 

sum(//A1/QTY) 

這將具有相同結果考慮到你提供的來源。

您可以使用

//A1[1] 

所以相同的名稱選擇第一個A1,獲得你願意,你可以在模板匹配A1[1],並呼籲sum(//A1/QTY)sum(/Input/A1/QTY)裏面獲得總和的結果。然後你用A2重複這個過程。

您可以用兩個遞歸模板實現這一點:

sum此處的表達式獲得節點*的值,其可以是A1A2。 XPath表達式將其名稱name(current())與輸入的每個子項(/Input/*)的name()進行比較,其將匹配A1A2,將每個節點的QTY中的金額相加。