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

Xml 如何在XQuery中将字符串转换为节点?,xml,xquery,marklogic,Xml,Xquery,Marklogic,我想将字符串转换为节点。我有一个定义为获取节点的方法,但我的值是一个字符串(它是硬编码的)。如何将该字符串转换为节点 因此,给定一个XQuery方法: define function foo($bar as node()*) as node() { (: unimportant details :) } 我有一个字符串要传递给foo方法。如何将字符串转换为节点,以便方法接受该字符串。标记逻辑解决方案: 将字符串转换为节点的最佳方法是使用: xdmp:unquote($string). 相

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

因此,给定一个XQuery方法:

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

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

标记逻辑解决方案:

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

xdmp:unquote($string).
相反,如果要将节点转换为字符串,可以使用:

xdmp:quote($node).
语言不可知解决方案:

要字符串的节点是:

fn:string($node)

这个问题的答案取决于所使用的发动机。例如,Saxon的用户使用
Saxon:parse
方法

事实上,XQuery规范中没有内置此功能

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

在大多数情况下,您将使用声明性形式,而不是硬编码字符串,例如(使用Stylus studio)

declare namespace my=”http://tempuri.org";
将函数my:foo($bar as node()*)声明为node(){
} ;
let$bar:=
返回我的:foo(bar)

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

text { "your string goes here" }
或者,如果您喜欢使用字符串内容创建一个元素,您可以构造一个元素,如下所示:

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

如果您谈论的是包含XML标记的字符串,那么还有一些标准化的解决方案(来自XPath/XQuery Functions 3.0):

  • 字符串到节点:
  • 要字符串的节点:

您还可以使用
fn:parse xml(xs:string)
将当前有效的xml字符串转换为文档。

xdmp:unquote和quote不是XQuery语言规范的一部分,它是一组MarkLogic扩展库的一部分。将xml从字符串文本加载到节点取决于所使用的XQuery引擎。另外,您的节点到字符串代码可能不符合海报的要求-它只返回$node以下所有节点的连接字符串值,而不是实际的XML语法(),我不愿意接受自己的答案,但这正是我所寻找的,并解决了我遇到的问题。这个问题需要重述吗?这是一个合理的提问方式。您可能还询问了如何将字符串解析(或反序列化)为XML。该字符串是否包含要解析为节点的转义XML,还是只想将该字符串转换为文本节点,以便将其传递给此特定函数?
element (some-element) { "your string goes here" }