如何在XQuery中将字符串转换为节点?

时间:2020-03-06 14:36:04  来源:igfitidea点击:

我想将字符串转换为节点。我有一个定义为采用节点的方法,但是我拥有的值是一个字符串(它是硬编码的)。如何将字符串转换为节点?

因此,给定一个XQuery方法:

define function foo($bar as node()*) as node() {
  (: unimportant details :)
}

我有一个想要传递给foo方法的字符串。我如何将字符串转换为节点,以便该方法将接受字符串。

解决方案

MarkLogic解决方案:

将字符串转换为节点的最佳方法是使用:

xdmp:unquote($string).

相反,如果要将节点转换为字符串,则可以使用:

xdmp:quote($node).

语言不可知的解决方案:

字符串的节点是:

fn:string($node)

这个问题的答案取决于所使用的引擎。例如,撒克逊人的用户使用saxon:parse方法。

事实是XQuery规范没有为此内置。

一般来说,仅当我们需要从CDATA部分提取一些嵌入式XML时,才真正需要使用它。否则,我们可以从文件系统读取文件,或者直接内联声明XML。

大多数情况下,我们将使用声明形式,而不是硬编码的字符串,例如(使用Stylus Studio)

declare namespace my = "http://tempuri.org";

declare function my:foo($bar as node()*) as node() {
    <unimportant></unimportant>
} ;

let $bar := <node><child></child></node>

return my:foo(bar)

如果要从字符串中创建文本节点,只需使用文本节点构造函数即可:

text { "your string goes here" }

或者,如果我们希望使用字符串内容来创建元素,则可以构造类似以下内容的元素:

element (some-element) { "your string goes here" }