o problema é que eu sei como acessar um nó específico, mas não tenho ideia de como acessar um nó se um irmão tiver um valor específico. Pode ser algo como / a / cc / contains (/ a / bb = 'zz')?
HOE SENGKIANG
Respostas:
100
Não tenho certeza de por que todo mundo está procurando por irmãos, você também pode verificar se há <bb/>elementos correspondentes ao predicado de <a/>:
@HOESENGKIANG: você deve clicar na marca de seleção para "aceitar" esta resposta, ou a que você achar que responde melhor à pergunta.
LarsH
23
P: Como selecionar um nó usando XPath se o nó irmão tiver um valor específico?
Como há apenas "eixos XPath" para irmãos seguintes e irmãos anteriores, você pode usar um deles se a posição for fixa.
Mas melhor:
procure cconde os pais têm filhos bbcom valor 'zz':
Não tenho certeza do que você quer dizer com 'apenas "eixos XPath" para irmão seguidor e irmão anterior'. Você está se referindo ao fato de que não existe um eixo único para todos os irmãos?
LarsH
@LarsH: Sim, desculpe, (desculpe meu péssimo inglês :-() - era isso que eu estava tentando dizer. (Porque a pergunta era para irmãos.)
hr_117
6
Primeiro, seu exemplo não é um XML bem formado. Passando por cima disso e de que você não descreveu muito bem suas intenções (o que exatamente você deseja selecionar e em que condição?), Presumo que queira fazer isso:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Seleciona
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
Você poderia escrever também é como
//bb[text()="zz"]/following-sibling::cc/text()
Por favor, olhe as especificações , tem alguns exemplos muito bem legíveis com os quais você aprenderá muito.
Explicação : Qualquer um bbque contenha 'zz'string em todos os nós filhos do bbentão indo para o nó pai desse bbuso .., agora que podemos acessar o cctexto de retorno.
Respostas:
Não tenho certeza de por que todo mundo está procurando por irmãos, você também pode verificar se há
<bb/>
elementos correspondentes ao predicado de<a/>
:fonte
*-sibling
eixo. 1 embora.O que você precisa é do
following-sibling
eixo XPathTeste o Xpath aqui: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
fonte
P: Como selecionar um nó usando XPath se o nó irmão tiver um valor específico?
Como há apenas "eixos XPath" para irmãos seguintes e irmãos anteriores, você pode usar um deles se a posição for fixa.
Mas melhor: procure
cc
onde os pais têm filhosbb
com valor'zz'
:fonte
//a[bb = 'zz']/cc
.Primeiro, seu exemplo não é um XML bem formado. Passando por cima disso e de que você não descreveu muito bem suas intenções (o que exatamente você deseja selecionar e em que condição?), Presumo que queira fazer isso:
Seleciona
TEXT VALUES OF ALL <CC> ELEMENTS //cc /text() THAT HAVE A PRECEDING SIBLING <BB> [preceding-sibling::bb ] THAT HAS TEXT VALUE EQUAL TO "zz" [text()="zz"]
Você poderia escrever também é como
Por favor, olhe as especificações , tem alguns exemplos muito bem legíveis com os quais você aprenderá muito.
fonte
// a: Seleciona todos os elementos 'a', não importa onde estejam.
// a / cc: Seleciona os elementos 'cc' que são filhos do elemento 'a' (não importa onde a esteja).
..: Seleciona o pai do nó atual.
[../bb='zz ']: onde o valor do elemento irmão' bb 'é zz.
Referência: http://www.w3schools.com/xsl/xpath_syntax.asp
fonte
Outra solução para este problema é
//bb[contains(.,'zz')]/../cc/text()
Explicação : Qualquer um
bb
que contenha'zz'
string em todos os nós filhos dobb
então indo para o nó pai dessebb
uso..
, agora que podemos acessar occ
texto de retorno.Espero que essa explicação não seja complexa.
fonte