Ошибка XQuery: фильтрация с переменной, возвращающей пустой результат - PullRequest
2 голосов
/ 23 сентября 2019

Я пытаюсь запустить следующий XQuery:

let $d := doc("ferry.xml")
let $x := $d/ferry/trips/trip[@depart='08:00' and start='Stockholm']/captain[@crew]
return $d/ferry/crews/crew[@crewID=$x]/name

и получить пустой результат.

Я хотел бы получить значение в <name>, где <crew crewID="JI"> (= Jill).

Я вижу, что $x включает <captain crew="JI"/>, и когда я запускаю

return $d/ferry/crews/crew[@crewID='JI']/name

, я получаю ожидаемый результат.

Как можноЯ заставляю функцию возврата читать переменную правильно?Вот файл XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ferry>
<ships>
    <ship shipID="SKHM">
        <name>Skeppsholm</name>
    </ship>
    <ship shipID="PERL">
        <name>Pearl</name>
        <cars>40</cars>
    </ship>
    <ship shipID="REVG">
        <name>Revenge></name>
        <length>50</length> 
    </ship>
</ships>
<crews>
    <crew crewID="JO">
        <name>Jack</name>
        <job>service</job>
        <job>deckhand</job>
    </crew>
    <crew crewID="JI">
        <name>Jill</name>
        <job>captain</job>
        <job>firstmate</job>
    </crew>
    <crew crewID="HA">
        <name>Harry</name>
        <job>deckhand</job> 
    </crew>
</crews>
<trips>
    <trip date="20171020" depart="08:00">
        <start>Stockholm</start>
        <end>Vaxholm</end> 
        <captain crew="JI" /> 
        <service crew="JO" /> 
    </trip>
    <trip date="20171130" depart="10:00">
        <start>Nacka</start>
        <end>Gustavberg</end> 
        <captain crew="JI" /> 
        <deckhand crew="HA" />
        <service crew="JA" /> 
    </trip>
</trips>
</ferry>

1 Ответ

0 голосов
/ 23 сентября 2019

Попробуйте изменить

let $x := $d/ferry/trips/trip[@depart='08:00' and start='Stockholm']/captain[@crew]

на

let $x := $d/ferry/trips/trip[@depart='08:00' and start='Stockholm']/captain/@crew

Вам нужно $x, чтобы быть просто значением атрибута crew;в настоящее время он возвращает весь элемент <captain crew="JI"/>.

...