Quelqu'un peut-il suggérer un format d'expression XPath renvoyant une valeur de chaîne contenant les valeurs concaténées de certains nœuds enfants qualifiants d'un élément, mais en ignorant les autres:
<div>
This text node should be returned.
<em>And the value of this element.</em>
And this.
<p>But this paragraph element should be ignored.</p>
</div>
La valeur renvoyée doit être une seule chaîne:
This text node should be returned. And the value of this element. And this.
Est-ce possible dans une seule expression XPath?
Merci.
Dans XPath 1.0:
Vous pouvez utiliser
/div//text()[not(parent::p)]
pour capturer les nœuds de texte recherchés. La concaténation elle-même ne peut pas être effectuée dans XPath 1.0, je vous recommande de le faire dans l'application hôte.
Dans XPath 2.0 :
string-join(/*/node()[not(self::p)], '')
Ce look qui fonctionne:
Utiliser comme contexte /div/
:
text() | em/text()
Ou sans l'utilisation du contexte:
/div/text() | /div/em/text()
Si vous voulez concaténer les deux premières chaînes, utilisez ceci:
concat(/div/text(), /div/em/text())
/div//text()
double slash force pour extraire le texte indépendamment des nœuds intermédiaires
Si vous voulez tous les enfants sauf p, vous pouvez essayer ce qui suit ...
string-join(//*[name() != 'p']/text(), "")
qui revient ...
This text node should be returned.
And the value of this element.
And this.