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.
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.
In XPath 2.0 :
string-join(/*/node()[not(self::p)], '')
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())
/div//text()
doppelter Schrägstrich zwingt zum Extrahieren von Text unabhängig von Zwischenknoten
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.