webentwicklung-frage-antwort-db.com.de

XPath, um die String-Verkettung qualifizierender untergeordneter Knotenwerte zurückzugeben

Kann jemand bitte ein XPath-Ausdrucksformat vorschlagen, das einen Zeichenfolgenwert zurückgibt, der die verketteten Werte bestimmter qualifizierender untergeordneter Knoten eines Elements enthält, andere jedoch ignoriert:

<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>

Der zurückgegebene Wert sollte eine einzelne Zeichenfolge sein:

This text node should be returned. And the value of this element. And this.

Ist dies in einem einzelnen XPath-Ausdruck möglich? 

Vielen Dank.

19
Tim Coulter

In XPath 1.0:

Sie können verwenden

/div//text()[not(parent::p)]

die gewünschten Textknoten erfassen. Die Verkettung selbst kann nicht in XPath 1.0 durchgeführt werden. Ich empfehle, sie in der Host-Anwendung auszuführen.

18
Tomalak

In XPath 2.0 :

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

27

Dieser Look, der funktioniert:

Verwendung als Kontext /div/:

text() | em/text()

Oder ohne die Verwendung von Kontext:

/div/text() | /div/em/text()

Wenn Sie die ersten beiden Zeichenfolgen zusammenführen möchten, verwenden Sie Folgendes:

concat(/div/text(), /div/em/text())
6
eLZahR
/div//text()

doppelter Schrägstrich zwingt zum Extrahieren von Text unabhängig von Zwischenknoten

6
Dewfy

Wenn Sie alle Kinder außer p wünschen, können Sie Folgendes versuchen:.

    string-join(//*[name() != 'p']/text(), "")

was zurückkehrt ...

This text node should be returned.
And the value of this element.
And this.
0