Exemplo 1
A sintaxe XPath básica é semelhante à localização de arquivos em um sistema de arquivos. Se o caminho começar com uma barra /, o caminho representa um caminho absoluto para um elemento.
/AAA
Selecione o elemento raiz AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
/AAA/CCC
Selecione todos os elementos filhos CCC de AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
/AAA/DDD/BBB
Seleciona todos os elementos filhos de DDD, um elemento filho de AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Exemplo 2
Se o caminho começar com uma barra dupla //, significa que todos os elementos do documento que atendem às regras após a barra dupla // estão selecionados (independentemente do relacionamento hierárquico) //BBB
Selecione todos os elementos BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
//DDD/BBB
Selecione todos os elementos BBB cujo elemento pai é DDD
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
Exemplo 3
O asterisco* significa selecionar todos os elementos localizados pelo caminho antes do asterisco
/AAA/CCC/DDD/*
Selecione todos os elementos com caminhos anexados a /AAA/CCC/DDD
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
/*/*/*/BBB
Selecione todos os elementos BBB que possuem 3 elementos ancestrais
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
//*
Selecione todos os elementos
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
Exemplo 4
A expressão no número quadrado pode especificar ainda mais o elemento, onde o número representa a posição do elemento no conjunto de seleção e a função last() representa o último elemento no conjunto de seleção
/AAA/BBB[1]
.
Selecione o primeiro elemento filho BBB de AAA
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
/AAA/BBB[último()]
Selecione o último elemento filho BBB de AAA
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
Exemplo 5
//@eu ia
Selecione todos os atributos de ID
<AAA>
<IDBBB = "b1"/>
<IDBBB = "b2"/>
<Nome BBB = "bbb"/>
<BBB/>
</AAA>
//BBB[@id]
Selecione elementos BBB com atributos de id
<AAA>
<BBB id = "b1"/>
<IDBBB = "b2"/>
<Nome BBB = "bbb"/>
<BBB/>
</AAA>
//BBB[@nome]
Selecione o elemento BBB com atributo name
<AAA>
<IDBBB = "b1"/>
<BBB id = "b2"/>
<Nome BBB = "bbb"/>
<BBB/>
</AAA>
//BBB[@*]
Selecione elementos BBB com quaisquer atributos
<AAA>
<IDBBB = "b1"/>
<BBB id = "b2"/>
<Nome BBB = "bbb"/>
<BBB/>
</AAA>
//BBB[não(@*)]
Selecione elementos BBB sem atributos
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<Nome BBB = "bbb"/>
<BBB/>
</AAA>
Exemplo 6
O valor do atributo pode ser usado como critério de seleção A função normalize-space remove espaços iniciais e finais e substitui sequências consecutivas de espaços por um único espaço
//BBB[@id='b1']
Selecione o elemento BBB que contém o atributo id e seu valor é 'b1'
<AAA>
<BBB id = "b1"/>
<Nome BBB = "bbb"/>
<Nome BBB = "bbb"/>
</AAA>
//BBB[@nome='bbb']
Selecione o elemento BBB que contém o nome do atributo e seu valor é 'bbb'
<AAA>
<BBB id = "b1"/>
<Nome BBB = "bbb"/>
<Nome BBB = "bbb"/>
</AAA>
//BBB[normalize-space(@name)='bbb']
Selecione o elemento BBB que contém o nome do atributo e seu valor (após remover os espaços iniciais e finais usando a função normalize-space) é 'bbb'
<AAA>
<BBB id = "b1"/>
<Nome BBB = "bbb"/>
<Nome BBB = "bbb"/>
</AAA>
Exemplo 7
A função count() pode contar o número de elementos selecionados
//*[count(BBB)=2]
Selecione elementos com 2 elementos filhos BBB
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
//*[contagem(*)=2]
Selecione um elemento com 2 filhos
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
//*[contagem(*)=3]
Selecione um elemento com 3 elementos filhos
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
Exemplo 8
A função name() retorna o nome do elemento, a função start-with() retorna true quando a primeira string de parâmetro da função começa com o segundo caractere de parâmetro e a função contains() retorna true quando seu primeiro parâmetro de string retorna true quando o segundo parâmetro de string é incluído
//*[name()='BBB']
Selecione todos os elementos nomeados BBB (aqui equivalente a //BBB)
<AAA>
<CCO>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
//*[começa com(nome(),'B')]
Selecione todos os elementos cujos nomes começam com "B"
<AAA>
<CCO>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
//*[contém(nome(),'C')]
Selecione todos os elementos cujos nomes contenham "C"
<AAA>
<CCO>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
Exemplo 9
Vários caminhos podem ser combinados usando o delimitador
//CCC |
Selecione todos os elementos CCC e BBB
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
/AAA/EEE | //BBB
Selecione todos os elementos BBB e todos os elementos EEE que são filhos de AAA
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
/AAA/EEE | //DDD/CCC |
Não há limite para o número de caminhos que podem ser mesclados
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
Exemplo 10
O eixo filho contém os elementos filhos do nó de contexto. Como eixo padrão, ele pode ser ignorado
.
Equivalente a /child::AAA
<AAA>
<BBB/>
<CCC/>
</AAA>
/criança::AAA
Equivalente a /AAA
<AAA>
<BBB/>
<CCC/>
</AAA>
/AAA/BBB
Equivalente a /child::AAA/child::BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
/criança::AAA/criança::BBB
Equivalente a /AAA/BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
/criança::AAA/BBB
Ambos podem ser combinados
<AAA>
<BBB/>
<CCC/>
</AAA>
Exemplo 11
O eixo descendente contém os descendentes do nó de contexto. Um descendente refere-se a um nó filho ou a um nó filho de um nó filho, etc., portanto, o eixo descendente não contém nós de atributos e namespaces
/descendente::*
.
Seleciona todos os descendentes do elemento raiz do documento. Ou seja, todos os elementos são selecionados.
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
/AAA/BBB/descendente::*
Seleciona todos os elementos descendentes de /AAA/BBB
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
//CCC/descendente::*
Selecione todos os elementos que possuem CCC entre seus ancestrais
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
</AAA>