XPath, um die String-Verkettung von anspruchsberechtigte Kind Knoten Werte zurückgeben
-
05-07-2019 - |
Frage
Kann jemand bitte ein XPath-Ausdruck-Format vorschlagen, die einen String-Wert gibt die verketteten Werte bestimmten anspruchsberechtigte Kind-Knoten ein Element enthält, aber andere zu ignorieren:
<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 Rückgabewert sollte eine einzelne Zeichenfolge sein:
This text node should be returned. And the value of this element. And this.
Ist das möglich in einem einzigen XPath-Ausdruck?
Danke.
Lösung
In XPath 1.0:
Sie können mit
/div//text()[not(parent::p)]
die gewünschten Textknoten zu erfassen. Die Verkettung selbst kann nicht in XPath 1.0 durchgeführt werden, empfehle ich es in der Host-Anwendung zu tun.
Andere Tipps
In XPath 2.0 :
string-join(/*/node()[not(self::p)], '')
/div//text()
doppelte Schrägstrich Kräfte Text unabhängig von Zwischenknoten zu extrahieren
Das Aussehen, das funktioniert:
Unter Verwendung als Kontext /div/
:
text() | em/text()
oder ohne die Verwendung von Kontext:
/div/text() | /div/em/text()
Wenn Sie die ersten beiden Strings verketten möchten, verwenden Sie diese:
concat(/div/text(), /div/em/text())
Wenn Sie alle Kinder außer p möchten, können Sie versuchen, die folgenden ...
string-join(//*[name() != 'p']/text(), "")
, die zurück ...
This text node should be returned.
And the value of this element.
And this.
könnten Sie verwenden eine for-Schleife jeder so gut und die Werte in einer Variablen wie folgt zusammenstellen
<xsl:variable name="newstring">
<xsl:for-each select="/div//text()">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:variable>