web-dev-qa-db-fra.com

XPath pour renvoyer la concaténation de chaîne des valeurs de noeud enfant qualifiantes

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.

19
Tim Coulter

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.

18
Tomalak

Dans XPath 2.0 :

string-join(/*/node()[not(self::p)], '')

27
Dimitre Novatchev

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())
6
eLZahR
/div//text()

double slash force pour extraire le texte indépendamment des nœuds intermédiaires

6
Dewfy

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.
0
Rodney P. Barbati