6
votes

Sélectionnez Texte à partir d'un nœud et omettez des nœuds enfants

J'ai besoin de sélectionner le texte dans un nœud, mais pas de nœuds enfants. Le XML ressemble à ceci xxx

si je sélectionne a / texte () , tout ce que je reçois est " pommes ". Comment devrais-je récupérer " pelles pommes " tout en omettant


1 commentaires

Bonne question, +1. Consultez ma réponse pour une solution de XPath complète, très courte et simple et pour une explication. :)


3 Réponses :


4
votes

Eh bien le chemin a / text () sélectionne tous les nœuds enfants de texte de l'élément A de sorte que le chemin est correct à ma vue. Seulement si vous utilisez ce chemin avec E.G. Xslt 1.0 et Il sortira la valeur de chaîne du premier noeud sélectionné. Dans XPath 2.0 et XQuery 1.0: String-Join (A / Text (Text (Text () / Normalize-Space (), '') Donne la chaîne Apple Poires peut-être que cela aide donc cela aide pour ton problème. Sinon, envisagez d'expliquer dans quel contexte vous utilisez XPath ou XQuery de sorte que a / texte () ne renvoie que la valeur (chaîne?) Du premier noeud sélectionné.


3 commentaires

Je l'utilise dans un script PHP et ma version de XSLT est définitivement 1.0.


+1 Explication correcte. XPath String () La fonction déploierait également le nœud défini sur un singleton.


Dave, même avec XPath 1.0, l'expression de chemin a / text () donne un nœud défini avec deux nœuds de texte. Si vous obtenez seulement un résultat, vous voudrez peut-être vous montrer le code PHP que vous avez exécuté la requête XPath afin que nous puissions essayer d'identifier pourquoi vous n'obtenez qu'un seul résultat. Si vous utilisez PHP.net/manual/fr/DomXPath.Query.php Ensuite, vous devriez obtenir deux nœuds dans la liste des nœuds retournés.



0
votes

Pour récupérer tous les descendants, je vous conseille d'utiliser la notation //. Cela retournera tous les descendants de texte sous un élément. Vous trouverez ci-dessous un extrait xquery qui obtient tous les nœuds de texte descendants et les formats comme Martin indiqués. XXX

ou si vous avez vos propres exigences de formatage, vous pouvez commencer par boucle via chaque élément de texte de la XQUERY suivante. xxx


1 commentaires

Vous avez écrit "pour récupérer tous les descendants [...]" . Cela n'a pas été demandé.



0
votes

Si je sélectionne un / texte (), tout ce que je reçois est "pommes". Comment devrais-je récupérer "des pommes poires "

utilise simplement : xxx

explication :

la valeur de la chaîne de la racine Le nœud ( / ) du document est la concaténation de tous ses descendants de nœud texte. Parce qu'il existe des nœuds de texte blanche-Space-Space-Seuls, nous devons éliminer ces nœuds de texte indésirables.

Voici une petite démonstration Comment cette solution fonctionne et ce qu'elle produit: xxx

Lorsque cette transformation est appliquée sur le document XML fourni: xxx

le Recherché, le résultat correct est produit: xxx


0 commentaires