Xquery 如何从错误中获取节点变量
我有一个简短的功能,如果流程中的任何部分出现问题,我可以从流程的前几个部分获取数据,并将它们写出来供将来调查。例如:Xquery 如何从错误中获取节点变量,xquery,marklogic,Xquery,Marklogic,我有一个简短的功能,如果流程中的任何部分出现问题,我可以从流程的前几个部分获取数据,并将它们写出来供将来调查。例如: try { let $var1 := element outer { element inner {"test"} } let $var2 := element outer2 { element inner2 {"test2"} } let $var3 as xs:string := 2 return
try {
let $var1 := element outer {
element inner {"test"}
}
let $var2 := element outer2 {
element inner2 {"test2"}
}
let $var3 as xs:string := 2
return ()
}
catch($e) {
xdmp:document-insert(
"testdoc.xml",
element toplevel {
element test1 {$e/error:stack/error:frame/error:variables/error:variable[error:name eq "var1"]/error:value},
element test2 {$e/error:stack/error:frame/error:variables/error:variable[error:name eq "var2"]/error:value}
}
)
}
这将生成以下记录:
<toplevel>
<test1>
<error:value xmlns:error="http://marklogic.com/xdmp/error"><outer><inner>test</inner></outer></error:value>
</test1>
<test2>
<error:value xmlns:error="http://marklogic.com/xdmp/error"><outer2><inner2>test2</inner2></outer2></error:value>
</test2>
</toplevel>
测试
测试2
当我想制作这个:
<toplevel>
<test1>
<outer>
<inner>test</inner>
</outer>
</test1>
<test2>
<outer2>
<inner2>test2</inner2>
</outer2>
</test2>
</toplevel>
测试
测试2
有什么想法吗?“错误”记录可能只保留变量中内容的缩短版本,而不是整个值。如果是这样的话,有人能想出另一种方法在意外中断后获取数据吗
<强>附录:< /强>虽然所给出的解决方案将用于通过错误传递小变量,但较长的变量被截断。
< P>类似于Martin Honnen在注释中建议的,但是代替<代码> */代码>,您可以考虑使用<代码> NODE()/CODE >,以便如果任何变量都不是元素,他们仍然被选中:element toplevel {
element test1 {$e/error:stack/error:frame/error:variables/error:variable[error:name eq "var1"]/error:value/node()},
element test2 {$e/error:stack/error:frame/error:variables/error:variable[error:name eq "var2"]/error:value/node()}
}
这听起来好像是
$e/error:stack/error:frame/error:variables/error:variable[error:name eq“var1”]/error:value/*
而不是$e/error:stack/error:frame/error:variable[error:name eq“var1”]/error:value
会给出值,虽然我猜元素的作用域中会有您想要的结果不包括的名称空间。不,这会改变返回到正确轨道上的
,但它会生成一个节点字符串,而不是节点本身。谢天谢地,我们可以使用xdmp:unquote将其转换回节点。