我试图根据另一个节点中的值在一个节点中汇总一些XML值。
Entry
中与Item相关的节点始终比RecordNo
中的RecordNo
小一Item
。因此,Entry
与RecordNo
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>
答案 0 :(得分:1)
你应该用这个表达式来解决:
sum(/Root/Items/Item[RecordNo -1=/Root/Entries/Entry[IsValid=1]/RecordNo]/Cost)
你的问题是你搞乱了上下文节点,记住谓词中的任何相对路径表达式(放在括号之间的表达式)引用当前元素,即将被选中的元素表达式的计算结果为真。