2008-09-23 80 views
4

我想將字符串轉換爲節點。我有一個被定義爲一個節點的方法,但是我的值是一個字符串(它是硬編碼的)。如何將該字符串轉換爲節點?如何將字符串轉換爲XQuery中的節點?

所以,對於一個XQuery方法:

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

我有,我想傳遞給foo的方法的字符串。如何將字符串轉換爲節點,以便方法接受字符串。

+0

是否字符串包含一些逃脫了要解析爲一個節點,或者你只是想XML將字符串轉換爲文本節點,以便您可以將它傳遞給此特定函數? – JeniT 2008-09-26 08:45:19

回答

8

MarkLogic解決方案:

將字符串轉換成一個節點的最佳方法是使用:

xdmp:unquote($string). 

反之,如果你想一個節點轉換成你可以使用一個字符串:

xdmp:quote($node). 

語言無關的解決方案:

節點串是:

fn:string($node) 
+1

xdmp:unquote和quote不屬於XQuery語言規範的一部分,它是一組MarkLogic擴展庫的一部分。從字符串文字加載xml到節點取決於正在使用的XQuery引擎。 http://www.xml.com/lpt/a/1660 – 2008-09-23 14:25:29

3

的這個問題的答案取決於正在使用的引擎。例如,用戶撒克遜,使用saxon:parse方法。

事實上,XQuery規範沒有內置於此。

一般來說,你會才真正需要使用這個如果你需要從CDATA節拉一些嵌入式XML。否則,您可以從文件系統讀入文件,或直接內聯聲明XML。

對於大多數情況,您將使用聲明性表單而不是硬編碼字符串,例如(使用手寫筆工作室)

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) 
8

如果你想創建一個文本節點出字符串,只需用一個文本節點構造:

text { "your string goes here" } 

,或者如果你希望創建一個元素與字符串的內容,你可以構造一個元素這樣的事情:

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

如果您正在討論包含XML標記的字符串,則有標準化解決方案(來自XPath/XQuery函數3。0),以及: