2009-07-20 4 views

Antwort

23

Ja, wollen Sie den Text() Funktion des Kindes Text zur Auswahl:

return $xml/text() 

Seien Sie vorsichtig, wenn Sie zwar in $ xml-Tag-Struktur verschachtelt werden, da dies nur eine Ebene tiefer gehen für Text Knoten. Wenn Sie den gesamten Text wollen zusammen Knoten, andere XML-Struktur Strippen, wird diese beliebig tief tun:

return $xml//text() 
+4

text() ist keine Funktion. Es ist ein Knotentest. Bevor Sie text() verrückt gehen, finden Sie in Evan Lenz 'Beitrag ["text() ist ein Code-Geruch"] (http://developer.marklogic.com/blog/text-is-a-code-symell), sowie der Dave Cassel Post, den ich nach Oliver's Antwort und Pavels Antwort verlinkt habe. – joewiz

15

Verwenden Sie die String-Funktion die Zeichenfolge Inhalt eines Knotens zu erhalten.

return string($xml) 
+2

Dies ist eigentlich eine idiomatische und bessere Alternative als die bevorzugte Antwort oben. Es wird auch jede Verschachtelung von Kindknoten korrekt behandeln. –

+3

In der Tat. Siehe David Cassels Erklärung der [Unterschiede zwischen text(), fn: string() und fn: data()] (http://blog.davidcassel.net/2011/06/text-fnstring-and-fndata/). - Alle drei sind bisher in den drei Antworten erschienen. – joewiz

8

Um nur die Daten innerhalb eines Elements zurückkehren Sie verwenden können:

return data($xml) 
+1

Genauer gesagt ist fn: data() eine Funktion, die Ihnen den atomisierten Wert einer Knotensequenz liefert, d. H. Den typisierten Wert jedes Knotens; während fn: string() gibt Ihnen den String-Wert eines Knotens. Weitere Informationen zu den Unterschieden zwischen text(), fn: string() und fn: data() finden Sie in den Links, die ich durch die obigen Kommentare gestreut habe. – joewiz

0

Cast xs: string {xs:string($xml/foo)}

0

OSB (Oracle Service Bus) Benutzer folgende Funktion verwenden können.

fn-bea:serialize($xml)

Verwandte Themen