2009-07-20 6 views

risposta

23

Sì, si desidera che la funzione text() per la selezione del testo bambino:

return $xml/text() 

fare attenzione se si avrà nidificato struttura dei tag all'interno $ xml, però, perché questo sarà solo andare un livello profondo per il testo i nodi. Se si desidera che tutto il testo nodi insieme, escludendo altra struttura XML, questo farà in modo arbitrario profondo:

return $xml//text() 
+4

text() non è una funzione. È un test del nodo. Prima di andare text() pazzo, vedi il post di Evan Lenz ["text() is a code smell"] (http://developer.marklogic.com/blog/text-is-a-code-smell), così come il post di Dave Cassel che ho collegato al seguito dopo la risposta di Oliver e la risposta di Pavel. – joewiz

15

Utilizzare la funzione di stringa per ottenere il contenuto della stringa di un nodo.

return string($xml) 
+2

Questa è in realtà un'alternativa più idiomatica e migliore rispetto alla risposta preferita sopra riportata. Gestirà anche qualsiasi annidamento di nodi figli correttamente. –

+3

Infatti. Vedere la spiegazione di David Cassel delle [differenze tra text(), fn: string() e fn: data()] (http://blog.davidcassel.net/2011/06/text-fnstring-and-fndata/) - Tutti e tre hanno fatto apparizioni nelle tre risposte finora. – joewiz

8

per restituire solo i dati all'interno di un elemento è possibile utilizzare:

return data($xml) 
+1

Più precisamente, fn: data() è una funzione che fornisce il valore atomizzato di una sequenza di nodi, vale a dire il valore digitato di ogni nodo; mentre fn: string() fornisce il valore di stringa di un nodo. Vedere i link che ho sparsi attraverso i commenti sopra per ulteriori informazioni sulle differenze tra text(), fn: string() e fn: data(). – joewiz

0

Fusioni a xs: string {xs:string($xml/foo)}

0

utenti OSB (Oracle Service Bus) possono utilizzare seguente funzione.

fn-bea:serialize($xml)

Problemi correlati