2014-03-04 70 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中的金额相加。