5

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

因此,给定一个 XQuery 方法:

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

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

4

5 回答 5

10

MarkLogic 解决方案:

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

xdmp:unquote($string).

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

xdmp:quote($node).

语言不可知的解决方案:

节点到字符串是:

fn:string($node)
于 2008-09-23T14:15:11.177 回答
9

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

text { "your string goes here" }

或者,如果您更喜欢使用字符串内容创建元素,您可以构造一个类似这样的元素:

element (some-element) { "your string goes here" }
于 2008-11-09T21:47:17.230 回答
9

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

于 2012-08-02T19:36:40.223 回答
3

这个问题的答案取决于所使用的引擎。例如,Saxon的用户使用该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)
于 2008-09-23T14:43:50.937 回答
0

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

于 2021-06-09T14:43:24.127 回答