我要求在输入xml中找到重复元素,并将数量与单个记录相加作为输出。
输入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>
答案 0 :(得分:1)
如果要对类型编号的多个节点求和,可以使用XPath sum()
函数。这会添加所有QTY
个节点:
sum(//QTY)
如果您只想添加A1
以下的节点,可以使用:
sum(/Input/A1/QTY)
或
sum(//A1/QTY)
考虑到您提供的来源,结果会相同。
您可以使用
选择名称相同的第一个A1
//A1[1]
因此,要获得您想要的结果,您可以在模板中匹配A1[1]
并在其中调用sum(//A1/QTY)
或sum(/Input/A1/QTY)
来获取总和。然后,您使用A2
重复此过程。
您可以使用两个递归模板来实现此目的:
此处sum
表达式获取节点*
的值,该值可能是A1
或A2
。 XPath表达式将其名称name(current())
与输入(name()
)的每个子项的/Input/*
进行比较,该项将匹配A1
或A2
,并添加金额在每个节点的QTY
中。