Xml 在维护上下文的同时计算XQuery函数中的字符串
在marklogic中,如何计算函数中的字符串(使用Xml 在维护上下文的同时计算XQuery函数中的字符串,xml,xquery,marklogic,exist-db,Xml,Xquery,Marklogic,Exist Db,在marklogic中,如何计算函数中的字符串(使用xdmp:value()、xdmp:eval(),或??)并保持上下文?(我可以在eXist中使用util:eval-inline()来实现这一点) 这是我所说的一个例子 XQuery let $predicate := "val='1234'" let $xml := <doc> <test> <val>abcd</val> <
xdmp:value()
、xdmp:eval()
,或??)并保持上下文?(我可以在eXist中使用util:eval-inline()
来实现这一点)
这是我所说的一个例子
XQuery
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[xdmp:value($predicate)]
declare function local:value($string as xs:string) as item()* {
xdmp:value($string)
};
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[local:value($predicate)]
这将返回以下错误:
[1.0-ml] XDMP-MISSINGCONTEXT: (err:XPDY0002) val -- Missing context item
我能够做到这一点,在存在(如下);在marklogic中可以这样做吗?我还试图保持本地函数签名不变
XQuery(在现有系统中工作)
将函数local:value($string作为xs:string)声明为item()*{
util:eval内联(,$string)
};
让$predicate:=“val='1234'”
让$xml:=
abcd
1234
返回
$xml/test[本地:值($predicate)]
输出(这正是我想要/期望的):
1234
我认为您必须将上下文节点传递给函数
declare function local:value($context as node(), $string as xs:string)
as item()*
{
$context/xdmp:value($string)
};
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[local:value(., $predicate)]
声明函数local:value($context作为node(),$string作为xs:string)
作为第()项*
{
$context/xdmp:value($string)
};
让$predicate:=“val='1234'”
让$xml:=
abcd
1234
返回$xml/test[本地:值(,$predicate)]
或者只是:
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[xdmp:value($predicate)]
let$predicate:=“val='1234'”
让$xml:=
abcd
1234
返回$xml/test[xdmp:value($predicate)]
在7.0-2.3版本中,这两项都适用于我
<test>
<val>1234</val>
</test>
1234
我可以发誓这是我尝试的第一件事。:-)工作完美。谢谢你,先生!另外,您的第二个示例(“或只是:”)与我的第一个示例完全相同,并且确实按照预期工作。是的,我看到了。你有没有想过写下这个用例?这可能很有趣,但我无法从测试用例中判断。
declare function local:value($context as node(), $string as xs:string)
as item()*
{
$context/xdmp:value($string)
};
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[local:value(., $predicate)]
let $predicate := "val='1234'"
let $xml :=
<doc>
<test>
<val>abcd</val>
</test>
<test>
<val>1234</val>
</test>
</doc>
return $xml/test[xdmp:value($predicate)]
<test>
<val>1234</val>
</test>