O XPath bookstore/book[1]
seleciona o primeiro nó do livro em bookstore
.
Como posso selecionar o primeiro nó que corresponde a uma condição mais complicada, por exemplo, o primeiro nó que corresponde /bookstore/book[@location='US']
Usar:
(/bookstore/book[@location='US'])[1]
Primeiro, os elementos do livro com o atributo de localização são iguais a 'US'. Em seguida, ele selecionará o primeiro nó desse conjunto. Observe o uso de parênteses, que são exigidos por algumas implementações.
Observe que isso não é o mesmo que /bookstore/book[1][@location='US']
, a menos que o primeiro elemento também possua esse atributo de local.
/bookstore/book[@location='US'][1]
não retorna todos os livros de 'US'. Eu testei várias vezes e em implementações xpath de idiomas diferentes./bookstore/book[@location='US'][1]
retorna o primeiro livro dos EUA em uma livraria. Se houver várias livrarias, ele retornará a primeira de cada uma. Foi isso que o OP solicitou (o primeiro nó na livraria). Sua versão retorna apenas um livro de todas as livrarias (a primeira correspondência)./bookstore/book[@location='US'][1]
funciona apenas com estrutura simples.Adicione um pouco mais de estrutura e as coisas quebram.
Com
/bookstore/category/book[@location='US'][1]
rendimentosnão "o primeiro nó que corresponde a uma condição mais complicada".
/bookstore/category/book[@location='US'][2]
não retorna nada.Com parênteses, você pode obter o resultado da pergunta original:
(/bookstore/category/book[@location='US'])[1]
dáe
(/bookstore/category/book[@location='US'])[2]
funciona como esperado.fonte
/bookstore/book[1]
e NÃO(/bookstore/book)[1]
. O caso que você forneceu não é o mesmo que o OP pediu. Presumivelmente, o OP aceitou minha resposta, como fez o que ele esperava (e solicitou).'(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'
. Caso haja muitas correspondências de nósname
.Como explicação para a resposta de Jonathan Fingland:
[position()=1 and @location='US']
) devem ser verdadeiras como um todo[position()=1][@location='US']
) devem ser verdadeiras uma após a outra[position()=1][@location='US']
! =[@location='US'][position()=1]
while
[position()=1 and @location='US']
==[@location='US' and position()=1]
[position()=1]
pode ser abreviado para[1]
Você pode criar expressões complexas em predicados com os operadores booleanos "
and
" e "or
" e com as funções booleanas XPathnot()
,true()
efalse()
. Além disso, você pode agrupar sub-expressões entre parênteses.fonte
A maneira mais fácil de encontrar o primeiro nó do livro em inglês (em todo o documento), levando em consideração o arquivo xml estruturado mais complicado, como:
é a expressão xpath:
fonte
Dado o exposto; você pode selecionar o primeiro livro com
E este encontrará o primeiro em qualquer lugar que tenha uma localização nos EUA. [A1]
Retornaria o conjunto de nós com todos os livros com o local US. [A1, B1, C2]
Retornaria o primeiro local do livro nos EUA que existe em uma categoria em qualquer lugar do documento. [B1]
retornará o primeiro livro com o local US que existe em qualquer lugar na livraria de elementos raiz; tornando a livraria / parte realmente redundante. [A1]
Em resposta direta:
Retornará o primeiro nó para o elemento do livro com o local US que está na livraria [A1]
Aliás, se você quisesse, neste exemplo, encontre o primeiro livro dos EUA que não era filho direto da livraria:
fonte
Use o índice para obter o nó desejado se o xpath for complicado ou se houver mais de um nó com o mesmo xpath.
Ex:
Você pode dar o número que nó deseja.
fonte
se o espaço para nome for fornecido no xml fornecido, é melhor usá-lo.
fonte
por ex.
E
fonte
Com a ajuda de um testador online do xpath , estou escrevendo esta resposta ...
Para isso:
o seguinte xpath:
saídas:
Como 1 significa selecionar todos os elementos td que são o primeiro filho de seu próprio pai direto.
Mas o seguinte xpath:
saídas:
fonte