web-dev-qa-db-fra.com

XQuery: Renvoie la valeur d'un élément plutôt que l'élément lui-même

J'ai un document XML qui contient les éléments suivants

...
<foo>abc</foo>
...

Si j'évalue

return $xml//foo

Je reviens

<foo>abc</foo>

Existe-t-il un moyen d'obtenir uniquement abc à la place?

22
kpozin

Oui, vous voulez la fonction text () pour sélectionner le texte enfant:

return $xml/text()

Soyez prudent si vous aurez une structure de balise imbriquée dans $ xml, car cela n'approfondira qu'un niveau pour les nœuds de texte. Si vous souhaitez regrouper tous les nœuds de texte, en supprimant toute autre structure XML, vous obtiendrez une profondeur arbitraire:

return $xml//text()
26
Harold L

Utilisez la fonction string pour obtenir le contenu de la chaîne d'un nœud.

return string($xml)
15
Oliver Hallam

Pour ne renvoyer que les données d'un élément, vous pouvez utiliser:

return data($xml)
8
SeeJay

Les utilisateurs de OSB (Oracle Service Bus) peuvent utiliser la fonction suivante.

fn-bea:serialize($xml)

0
Aniruddha Jagtap

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

0
savemaxim