XPath, um die String-Verkettung von anspruchsberechtigte Kind Knoten Werte zurückgeben

StackOverflow https://stackoverflow.com/questions/1403971

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

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top