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.

È stato utile?

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

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top