XSLT Summing基于其他节点值的值

时间:2014-01-18 01:03:57

标签: xml xslt xpath sum xpath-1.0

我试图根据另一个节点中的值在一个节点中汇总一些XML值。

Entry中与Item相关的节点始终比RecordNo中的RecordNo小一Item。因此,EntryRecordNo 1与RecordNo 2的项目相关。

我想对所有项目/成本节点求和,其中IsValid = 1为相应的Entry Node。 我只能使用XSLT 1.0版。

我试过了

Sum(../Items/Item[../Entries/Entry[IsValid=1 and RecordNo -1 = ../Entries/Entry/RecordNo]])

以下示例中我想要的输出为22。

<Root>
<Items>
    <Item>
        <Cost>10</Cost>
        <RecordNo>2</RecordNo>
        <Type>1</Type>
    </Item>
    <Item>
        <Cost>12</Cost>
        <RecordNo>5</RecordNo>
        <Type>1</Type>
    </Item>
    <Item>
        <Cost>10</Cost>
        <RecordNo>9</RecordNo>
        <Type>2</Type>
    </Item>
</Items>
<Entries>
    <Entry>
        <IsValid>1</IsValid>
        <RecordNo>1</RecordNo>
    </Entry>
    <Entry>
        <IsValid>1</IsValid>
        <RecordNo>4</RecordNo>
    </Entry>
    <Entry>
        <IsValid>0</IsValid>
        <RecordNo>8</RecordNo>
    </Entry>
</Entries>
</Root>

1 个答案:

答案 0 :(得分:1)

你应该用这个表达式来解决:

sum(/Root/Items/Item[RecordNo -1=/Root/Entries/Entry[IsValid=1]/RecordNo]/Cost)

你的问题是你搞乱了上下文节点,记住谓词中的任何相对路径表达式(放在括号之间的表达式)引用当前元素,即将被选中的元素表达式的计算结果为真。