Come si converte una stringa in un nodo in XQuery?
Domanda
Vorrei convertire una stringa in un nodo. Ho un metodo che è definito per prendere un nodo, ma il valore che ho è una stringa (è hard coded). Come faccio a trasformare quella stringa in un nodo?
Quindi, dato un metodo XQuery:
define function foo($bar as node()*) as node() {
(: unimportant details :)
}
Ho una stringa che voglio passare al metodo foo. Come posso convertire la stringa in un nodo in modo che il metodo accetti la stringa.
Soluzione
Soluzioni MarkLogic:
Il modo migliore per convertire una stringa in un nodo è usare:
xdmp:unquote($string).
Al contrario, se si desidera convertire un nodo in una stringa, utilizzare:
xdmp:quote($node).
Soluzioni agnostiche linguistiche:
Il nodo alla stringa è:
fn:string($node)
Altri suggerimenti
Se vuoi creare un nodo testo dalla stringa, usa semplicemente un testo costruttore di nodi:
text { "your string goes here" }
o se preferisci creare un elemento con il contenuto della stringa, puoi costruire un elemento qualcosa del genere:
element (some-element) { "your string goes here" }
Se stai parlando di stringhe che contengono markup XML, esistono anche soluzioni standardizzate (da XPath / XQuery Functions 3.0):
- stringa al nodo: fn: parse-xml ( )
- nodo su stringa: fn: serialize ()
La risposta a questa domanda dipende dal motore utilizzato. Ad esempio, gli utenti di Saxon , utilizzano il metodo saxon: parse
.
Il fatto è che le specifiche XQuery non sono integrate per questo.
In generale, dovresti davvero usarlo solo se avessi bisogno di estrarre un po 'di XML da una sezione CDATA . Altrimenti puoi leggere i file dal filesystem o dichiarare XML direttamente in linea.
Per la maggior parte useresti il ??modulo dichiarativo, invece di una stringa codificata ad es. (usando 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)