Pergunta

Alguém por favor pode sugerir um formato expressão XPath que retorna um valor string contendo os valores concatenados de determinados nós qualificação filho de um elemento, mas ignorando os outros:

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

O valor retornado deve ser um único string:

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

Isto é possível em uma única expressão XPath?

Graças.

Foi útil?

Solução

Em XPath 1.0:

Você pode usar

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

para capturar os nós de texto queria. A concatenação em si não pode ser feito em XPath 1.0, eu recomendo fazê-lo no aplicativo host.

Outras dicas

Em XPath 2.0 :

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

/div//text()

forças barra dupla de extrair o texto independentemente de nós intermediários

Este olhar que as obras:

Usando como contexto /div/:

text() | em/text()

ou sem o uso de contexto:

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

Se você quiser concat as duas primeiras cordas, use o seguinte:

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

Se você quer todas as crianças, exceto p, você pode tentar o seguinte ...

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

que retorna ...

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

Você pode usar um para-cada loop bem e montar os valores em uma variável como este

<xsl:variable name="newstring">
    <xsl:for-each select="/div//text()">
      <xsl:value-of select="."/>
    </xsl:for-each>
  </xsl:variable>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top