похоже на эту ссылку xsl sum siblings based on node value, мне нужно применить преобразование xsl, которое суммирует определенные значения узлов на основе значения одного из его узлов-сестер, проблема в том, что есть похожие узлы, которые Я хочу получить сумму, но я не смог понять xslt из-за разных родителей. вот как выглядит xml.xsl sum братьев и сестер с разными родителями на основе значения узла
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Message>
<Body>
<Order>
<Item1>
<.../>
<Type>widget</Type>
<Qty>20</Qty>
<.../>
</Item1>
<Item>
<.../>
<Type>gadget</Type>
<Qty>10</Qty>
<.../>
</Item>
<Item2>
<.../>
<Type>widget</Type>
<Qty>5</Qty>
<.../>
</Item2>
<Item3>
<.../>
<Type>widget</Type>
<Qty>2</Qty>
<.../>
</Item3>
<Item3>
<.../>
<Type>Other</Type>
<Qty>0</Qty>
<.../>
</Item3>
<Item/>
</Order>
</Body>
</Message>
Я хочу, чтобы иметь возможность группе через тип виджета и получить сумму количества, мой XSLT, как это.
<xsl:value-of select="sum(/Message/Body/Order/Item1|Item2|Item3[Type = 'widget'] /Qty)"/>
мой код не дает мне ошибку, но он также ничего не возвращает. Я хочу, чтобы мой вывод был как ниже, без жесткого кодирования типов в xml, таких как виджет, причина гаджета, которая также может измениться на другие типы.
Widget Всего = 27
Gadget Всего = 10
Я также хотел бы, чтобы исключить в том числе типа с суммой, равной 0 от выхода.
Спасибо! Raf
Привет, Ян, есть способ не жестко кодировать типы, которые я получаю? например, я не хочу создавать путь для каждого типа, например/Message/Body/Order/(Item1 | Item2 | Item3) [Type = 'widget']/Qty,/Message/Body/Order/(Item1 | Item2 | Item3) [Type = 'gadget']/Qty, я хотел, чтобы он был динамическим. Благодаря! – raf
@raf, поскольку вы работаете в XSLT 2.0, вам повезло - это легко с 'for-each-group' –