Во-первых, ваш xml неправильно сформирован:
Я использовал ниже XML и запрос:
let $input :=
<purchase-order>
<line-items>
<line-item type="lamp" amount="52"/>
<line-item type="lamp" amount="40000"/>
<line-item type="lamp" amount="3500"/>
<line-item type="lamp" amount="3500"/>
<line-item type="couch" amount="50000"/>
<line-item type="chair" amount="110000"/>
<line-item type="chair" amount="5000"/>
<line-item type="chair" amount="80000"/>
</line-items>
<other-stuff></other-stuff>
</purchase-order>
let $purchase-order :=
for $each-type in distinct-values($input/line-items/line-item/@type)
let $seq := $input/line-items/line-item[@type = $each-type]
order by $each-type
return
<line-items type="{$each-type}">
{
for $one in $seq
order by xs:integer($one/@amount)
return $one
}
</line-items>
return <purchase-order>{$purchase-order}</purchase-order>
Вывод генерируется по запросу:
<purchase-order>
<line-items type="chair">
<line-item amount="5000" type="chair"/>
<line-item amount="80000" type="chair"/>
<line-item amount="110000" type="chair"/>
</line-items>
<line-items type="couch">
<line-item amount="50000" type="couch"/>
</line-items>
<line-items type="lamp">
<line-item amount="52" type="lamp"/>
<line-item amount="3500" type="lamp"/>
<line-item amount="3500" type="lamp"/>
<line-item amount="40000" type="lamp"/>
</line-items>
</purchase-order>
Надеюсь, ваше требование полностью заполнит этот запрос.