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

时间:2008-09-23 14:12:23

标签: xml xquery marklogic

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

所以,给定一个XQuery方法:

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

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

5 个答案:

答案 0 :(得分:10)

MarkLogic解决方案:

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

xdmp:unquote($string).

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

xdmp:quote($node).

与语言无关的解决方案:

节点到字符串是:

fn:string($node)

答案 1 :(得分:9)

如果您想在字符串中创建 text 节点,只需使用 text 节点构造函数:

text { "your string goes here" }

或者如果您希望使用字符串内容创建元素,则可以构建元素,如下所示:

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

答案 2 :(得分:8)

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

答案 3 :(得分:3)

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

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

一般来说,如果您需要从 CDATA 部分中提取一些嵌入的 XML ,您只需要使用它。否则,您可以从文件系统中读取文件,或直接内联声明 XML

最多使用声明性表单,而不是硬编码字符串,例如(使用Stylus工作室)

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)

答案 4 :(得分:0)

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