Ho un documento XML che contiene il seguenteXQuery: il valore di ritorno di un elemento piuttosto l'elemento stesso
...
<foo>abc</foo>
...
Se valuto
return $xml//foo
torno
<foo>abc</foo>
C'è un modo per ottenere solo abc
?
Ho un documento XML che contiene il seguenteXQuery: il valore di ritorno di un elemento piuttosto l'elemento stesso
...
<foo>abc</foo>
...
Se valuto
return $xml//foo
torno
<foo>abc</foo>
C'è un modo per ottenere solo abc
?
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()
Utilizzare la funzione di stringa per ottenere il contenuto della stringa di un nodo.
return string($xml)
Questa è in realtà un'alternativa più idiomatica e migliore rispetto alla risposta preferita sopra riportata. Gestirà anche qualsiasi annidamento di nodi figli correttamente. –
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
per restituire solo i dati all'interno di un elemento è possibile utilizzare:
return data($xml)
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
Fusioni a xs: string {xs:string($xml/foo)}
utenti OSB (Oracle Service Bus) possono utilizzare seguente funzione.
fn-bea:serialize($xml)
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