Frage

Ich möchte eine Zeichenfolge in einen Knoten konvertieren. Ich habe ein Verfahren, das definiert ist, einen Knoten zu übernehmen, aber der Wert I haben ist eine Zeichenfolge (es hart codiert). Wie kann ich diese Zeichenfolge in einen Knoten machen?

So, da eine XQuery-Methode:

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

Ich habe eine Zeichenfolge, die ich auf die foo-Methode übergeben werden soll. Wie konvertiere ich die Zeichenfolge zu einem Knoten, so dass die Methode der Zeichenfolge akzeptieren.

War es hilfreich?

Lösung

Marklogic-Lösungen:

Der beste Weg, um eine Zeichenfolge in einen Knoten zu konvertieren ist zu verwenden:

xdmp:unquote($string).

Im Gegensatz dazu, wenn Sie einen Knoten in eine Zeichenfolge konvertieren verwenden Sie:

xdmp:quote($node).

Sprache Agnostiker Lösungen:

Node-String ist:

fn:string($node)

Andere Tipps

Wenn Sie einen Text erstellen mögen Knoten aus der Zeichenfolge, benutzen Sie einfach einen Text Knoten Konstruktor:

text { "your string goes here" }

oder wenn Sie es vorziehen, ein Element mit dem String Inhalt zu erstellen, können Sie ein Element konstruieren so etwas wie folgt aus:

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

Wenn Sie Strings sprechen, die XML-Markup enthalten, gibt es standardisierte Lösungen (von XPath / XQuery-Funktionen 3.0) als auch:

Die Antwort auf diese Frage hängt davon ab, welcher Motor verwendet wird. Zum Beispiel Benutzer von Saxon , verwenden Sie die saxon:parse Methode.

Die Tatsache ist, die XQuery spec nicht über ein für diese eingebaut.

Im Allgemeinen würden Sie nur wirklich brauchen, diese zu verwenden, wenn Sie einige eingebettete XML von CDATA zu ziehen brauchte. Ansonsten können Sie Dateien in aus dem Dateisystem lesen, oder deklarieren XML direkt inline.

Für die meisten würden Sie die deklarative Form verwenden, anstelle einer fest codierten Zeichenfolge z.B. (Unter Verwendung von 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top