用于对重复元素求和的Xpath

时间:2014-03-04 19:46:30

标签: xslt xpath sum

我要求在输入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>

1 个答案:

答案 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表达式获取节点*的值,该值可能是A1A2。 XPath表达式将其名称name(current())与输入(name())的每个子项的/Input/*进行比较,该项将匹配A1A2,并添加金额在每个节点的QTY中。