В XQuery 3.1 этот (тестовый) запрос проверяет наличие определенных узлов, проверяя name()
:
declare variable $doc :=
doc("/db/apps/deheresi/data/ms609_0013.xml"));
let $ele := $doc//tei:sic | $doc//tei:surplus
for $n in $ele
let $output := switch ($n/name())
case ("sic")
return ($n)
case ("surplus")
return ($n)
default return ""
return $output
Возвращает следующий XML правильно :
<surplus reason="surplus">die</surplus>
<surplus reason="repeated">et Raimundum de las de Recaut</surplus>
Теперь, когда я хочу снова выполнить свой фактический запрос в том же документе, чтобы проверить узел для создания HTML, он не находит тот же tei:surplus
:
declare variable $doc :=
doc("/db/apps/deheresi/data/ms609_0013.xml"));
let $ele := $doc//tei:sic | $doc//tei:surplus
for $n in $ele
let $output := switch ($n)
case ($n/self::tei:sic)
return (<span class="inter">
<i>ms. </i>
{$n/tei:orig/text()}
</span>,
<span class="diplo">
<i>corr. </i>
{$n/tei:corr/text()}
</span>)
case ($n/self::tei:surplus[@reason="surplus"])
return (<span><i>supp.</i>{$n/text()}</span>)
case ($n/self::tei:surplus[@reason="repeated"])
return (<span><i>supp. (dup.)</i>{$n/text()}</span>)
default return ""
return $output
Что-то не так с тем, как я тестирую узел на case
, что он не находит tei:surplus
в том же документе?
NB: когда я делаю то же самое дляДокумент, который содержит первый случай (tei:sic
), он выводит нормально.Очевидно, что тест в принципе должен работать!
Заранее спасибо.