Tendo o seguinte XML:
<node>Text1<subnode/>text2</node>
Como seleciono o primeiro ou o segundo nó de texto via XPath?
Algo assim:
/node/text()[2]
é claro que não funciona porque é o resultado mesclado de todos os textos dentro do nó.
Tendo o seguinte XML:
<node>Text1<subnode/>text2</node>
Como seleciono o primeiro ou o segundo nó de texto via XPath?
Algo assim:
/node/text()[2]
é claro que não funciona porque é o resultado mesclado de todos os textos dentro do nó.
Respostas:
Tendo o seguinte XML:
<node>Text1<subnode/>text2</node>
Como seleciono o primeiro ou o segundo nó de texto via XPath?
Use :
/node/text()
Isso seleciona todos os filhos do nó de texto do elemento superior (chamado "nó") do documento XML.
/node/text()[1]
Isso seleciona o primeiro filho do nó de texto do elemento superior (chamado "nó") do documento XML.
/node/text()[2]
Isso seleciona o segundo filho do nó de texto do elemento superior (chamado "nó") do documento XML.
/node/text()[someInteger]
Isso seleciona o filho do nó superior do elemento superior (chamado "nó") do documento XML. É equivalente à seguinte expressão XPath:
/node/text()[position() = someInteger]
/node[2]
não deve selecionar nenhum nó se o documento XML de origem estiver bem formado. Por definição, em um documento XML bem formado, existe apenas um (único) elemento superior - também conhecido comodocument-element
//*[text()]
qualquer maneira. /html/text()
não funciona.
/html/text()
não seleciona todos os nós de texto no documento - apenas os nós de texto filhos (não descendentes) do html
elemento superior . Você provavelmente quer /html//text()
. Geralmente, é necessário algum conhecimento e entendimento do XPath para construir expressões XPath.
seu xpath deve funcionar. Testei o seu xpath e o meu na implementação do MarkLogic e do Zorba Xquery / Xpath.
Ambos devem funcionar.
/node/child::text()[1] - should return Text1
/node/child::text()[2] - should return text2
/node/text()[1] - should return Text1
/node/text()[2] - should return text2
/node/text()[2]
[...] não funciona porque é o resultado mesclado de todo texto dentro do nó. Isso está errado: significa o segundo filho do nónode
raiz do elemento raiz . O valor da sequência (concatenação dos nós de texto descendentes) seria #string(/node)