Вывести XML-узлы, проверив, все ли значения их узлов-наследников больше определенного фиксированного значения? - PullRequest
2 голосов
/ 12 октября 2019

У меня есть следующий документ, в котором я хочу выбрать все узлы с их связанными идентификаторами, если все их элементы-узлы-наследники больше 300.

<item>
    <deposit id="1">
        <amount>1200</amount>
        <amount>5000</amount>
        <amount>2300</amount>
    </deposit>
    <deposit id="2">
        <amount>300</amount>
        <amount>1500</amount>
        <amount>700</amount>
    </deposit>
    <deposit id="3">
        <amount>300</amount>
        <amount>500</amount>
        <amount>700</amount>
    </deposit>
    <deposit id="4">
        <amount>300</amount>
    </deposit>
    <deposit id="5">
        <amount>3500</amount>
    </deposit>
    <deposit id="6">
        <amount>1000</amount>
    </deposit>
</item>

Я попытался запустить следующий блок XQuery, ноон дал мне то же, что и вышеупомянутый документ без каких-либо изменений.

let $e := $depot/deposit
for $a in $e/amount
return if (data($a/preceding-sibling::amount)>"300") then $e else ()

Я ожидаю получить следующий результат запроса,

<item>
    <deposit id="1">
        <amount>1200</amount>
        <amount>5000</amount>
        <amount>2300</amount>
    </deposit>
    <deposit id="5">
        <amount>3500</amount>
    </deposit>
    <deposit id="6">
        <amount>1000</amount>
    </deposit>
</item>

1 Ответ

2 голосов
/ 12 октября 2019

Это должно привести к желаемому результату:

let $item := //deposit[not(amount[text()<=300])]

return 
(<item>
{$item}
</item>)
...