XQuery 切换测试节点
XQuery switch testing node
在 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
Returns 以下 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
?
注意:当我对包含第一个案例 (tei:sic
) 的文档执行相同操作时,它输出正常。显然原则上测试应该有效!
提前致谢。
switch 构造比较原子值。你可以这样使用它:
switch (node-name($n))
case QName("http://tei-namespace/", "sic") return <something/>
请注意使用 node-name()
而不是 name()
以避免对名称空间前缀的任何依赖。
但使用 typeswitch 可能更好:
typeswitch ($n)
case element(tei:sic) return <something/>
在 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
Returns 以下 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
?
注意:当我对包含第一个案例 (tei:sic
) 的文档执行相同操作时,它输出正常。显然原则上测试应该有效!
提前致谢。
switch 构造比较原子值。你可以这样使用它:
switch (node-name($n))
case QName("http://tei-namespace/", "sic") return <something/>
请注意使用 node-name()
而不是 name()
以避免对名称空间前缀的任何依赖。
但使用 typeswitch 可能更好:
typeswitch ($n)
case element(tei:sic) return <something/>