1

我正在尝试根据另一个节点中的值对一个节点中的一些 XML 值求和。

与 Item 相关的节点Entry总是RecordNoRecordNoin小一Item。所以Entrywith RecordNo1 与 Item with RecordNo2 相关。

我想总结IsValid = 1相应入口节点的所有项目/成本节点。我只能使用 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>
4

1 回答 1

1

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

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

您的问题是您弄乱了上下文节点,请记住谓词中的任何相对路径表达式(您放在括号之间的表达式)都指的是当前元素,如果表达式求值,将选择该元素为真。

于 2014-01-18T01:50:11.290 回答