Marklogic如何循环每个节点
Marklogic how to loop each node
我尝试循环每个 $node
以获取元素,然后 return string-join()
将所有元素一起放入 local:function
。但它不工作。
XDMP-AS: (err:XPTY0004) local:test-case($value) -- Invalid coercion: "EF127557 Y" as node().
我不明白这个错误代码是什么意思。
xquery version "1.0-ml";
declare namespace techco="http://techco.com/db/record";
declare namespace meta="http://techco.com/db/record/meta";
declare function local:test-case($nodes as node()*) as node()* {
let $pl := for $node in $nodes
let $ANumber := $node/db:Record/meta:Metadata/meta:ANumber
let $ActiveFlag := $node/db:Record/meta:Metadata/meta:ActiveFlag
let $value:= fn:string-join(($ANumber,$ActiveFlag)," ")
return $value
return $pl
};
let $query:=cts:and-query((
....
))
let $value := cts:search(
fn:doc(),
$query
)
return local:test-case($value)
由于没有示例数据,我无法对此进行测试,但现在应该可以了。问题是您的 return 类型设置为 node()
并且需要 xs:string*
。 无效强制转换: 错误意味着它获取的数据类型不是它所期望的。
xquery version "1.0-ml";
declare namespace techco="http://techco.com/db/record";
declare namespace meta="http://techco.com/db/record/meta";
declare function local:test-case($nodes as node()*) as xs:string* {
let $pl := for $node in $nodes
let $ANumber := $node/db:Record/meta:Metadata/meta:ANumber
let $ActiveFlag := $node/db:Record/meta:Metadata/meta:ActiveFlag
let $value:= fn:string-join(($ANumber,$ActiveFlag)," ")
return $value
return $pl
};
let $query:=cts:and-query((
....
))
let $value := cts:search(
fn:doc(),
$query
)
return local:test-case($value)
我尝试循环每个 $node
以获取元素,然后 return string-join()
将所有元素一起放入 local:function
。但它不工作。
XDMP-AS: (err:XPTY0004) local:test-case($value) -- Invalid coercion: "EF127557 Y" as node().
我不明白这个错误代码是什么意思。
xquery version "1.0-ml";
declare namespace techco="http://techco.com/db/record";
declare namespace meta="http://techco.com/db/record/meta";
declare function local:test-case($nodes as node()*) as node()* {
let $pl := for $node in $nodes
let $ANumber := $node/db:Record/meta:Metadata/meta:ANumber
let $ActiveFlag := $node/db:Record/meta:Metadata/meta:ActiveFlag
let $value:= fn:string-join(($ANumber,$ActiveFlag)," ")
return $value
return $pl
};
let $query:=cts:and-query((
....
))
let $value := cts:search(
fn:doc(),
$query
)
return local:test-case($value)
由于没有示例数据,我无法对此进行测试,但现在应该可以了。问题是您的 return 类型设置为 node()
并且需要 xs:string*
。 无效强制转换: 错误意味着它获取的数据类型不是它所期望的。
xquery version "1.0-ml";
declare namespace techco="http://techco.com/db/record";
declare namespace meta="http://techco.com/db/record/meta";
declare function local:test-case($nodes as node()*) as xs:string* {
let $pl := for $node in $nodes
let $ANumber := $node/db:Record/meta:Metadata/meta:ANumber
let $ActiveFlag := $node/db:Record/meta:Metadata/meta:ActiveFlag
let $value:= fn:string-join(($ANumber,$ActiveFlag)," ")
return $value
return $pl
};
let $query:=cts:and-query((
....
))
let $value := cts:search(
fn:doc(),
$query
)
return local:test-case($value)