Xquery не возвращает желаемые значения

Я пытаюсь вернуть определенный набор значений, однако запрос не совсем возвращает то, что я хотел бы. Я хотел бы вернуть записи автора "Hennie J. Steenhagen", сгруппированные по годам. Однако, что он возвращает, так это записи, сгруппированные по годам, если они того же года, что и одна из записей Hennies. Не только Хенни.

Например, если у нас есть запись <www><author>Hennie*</author><year>1990</year></www> а также <www><author>Derpie</author><year>1990></year></www> запрос вернет обе записи, сгруппированные в 1990 году, мне бы хотелось, чтобы Хенни вернулась.

for $y in /*/*/year where $y/../author ="Hennie J. Steenhagen" return <year-Pub>{$y}{/*/*[year = $y]}</year-Pub>

2 ответа

Решение

Ваш вопрос довольно сложен для понимания, потому что ваш XPath обращается к большему дереву узлов XML, чем приведенный вами пример XML. Однако для примера я предполагаю, что ваши записи названы record, Кроме того, ваш вывод вашей XPath не имеет большого смысла для меня, но я предполагаю, что вы знаете, что вы хотите!

Учитывая XML:

<record>
    <www>
        <author>Hennie J. Steenhagen</author>
        <year>1990</year>
    </www> 
    and 
    <www>
        <author>Derpie</author>
        <year>1990></year>
    </www>
</record>

Если у вас есть процессор XQuery 3.0, вы можете использовать следующее:

/record/www[author = "Hennie J. Steenhagen"] ! <year-Pub>{year}{.}</year-Pub>

Если у вас есть доступ только к процессору XQuery 1.0, вы можете вернуться к следующему:

for $w in /record/www[author = "Hennie J. Steenhagen"]
return
    <year-Pub>{$w/year}{$w}</year-Pub>

В обоих моих примерах используется только один предикат, который фильтрует данные только один раз. В то время как ваше самостоятельное решение использует как предикат, так и where выражение, и поэтому должен фильтровать данные дважды.

Починил это,

for $y in /*/*/year where $y/../author ="Hennie J. Steenhagen" and /*/*[year=$y] return <year-Pub>{$y/../*}</year-Pub>

Спасибо всем, кто проводит время в поисках.

Другие вопросы по тегам