XPath
Introdução
XPath
Sintaxe para definir partes de um documento
XML
Utiliza expressões baseadas em caminhos para
navegar por um documento XML
Permite a localização de elementos e atributos de
um documento XML
Define um conjunto de funções padrão
Padrão do W3C
2
Expressões XPath
Permitem a seleção de nós de um
documento XML
Semelhantes a expressões utilizadas nos
sistemas de arquivos
/home/paulo/docs/[Link]
C:/Meus Documentos/docs/[Link]
Podem retornar um conjunto de nós, uma
string, um valor lógico ou um número
3
Terminologia
Nós
XPath define sete tipos de nós
element, attribute, text, namespace, processing-
instruction, comment e document (root)
Documentos XML são tratados como árvores de
nós
O nó raiz da árvore é chamado de document
node ou root node
4
Exemplo
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
<bookstore> nó de elemento raiz
<author>J. K. Rowling</author> nó de elemento
lang=“en” nó de atributo
5
Exemplo
/ (document node)
bookstore
book
title
@lang
author
year
price
6
Relacionamento entre nós
Cada elemento e atributo possui um pai
(parent)
No exemplo anterior, o elemento book é o pai
dos elementos title, author, year e price
Um nó de elemento pode possuir zero, um
ou mais filhos (children)
No exemplo anterior, os elementos title,
author, year e price são filhos do elemento
book
7
Relacionamentos entre nós
Nós que possuem o mesmo pai são irmãos
(siblings)
Elementos title, author, year e price do
exemplo anterior
Os ancestrais de um nó são seu pai, pai do
pai, pai do pai do pai e assim por diante
No exemplo anterior, os ancestrais de title são
book e bookstore
8
Relacionamento entre nós
Os descendentes de um nó são seus filhos,
filhos dos filhos, filhos dos filhos dos filhos e
assim por diante
No exemplo anterior, os descendentes de
bookstore são book, title, author, year e
price
9
Relacionamentos entre nós
ancestral
Pai
(e ancestral)
irmão O próprio irmão
Filho
(e descendente)
descendente
10
Sintaxe XPath
XPath utiliza expressões para selecionar nós ou conjunto de nós
em documentos XML
O documento XML abaixo será utilizado como exemplo
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
11
Selecionando nós
Um nó é selecionado seguindo-se o caminho
definido pela expressão
Expressão Descrição
nomeX Seleciona todos os nós com o nomeX partir do nó
corrente (inclusive)
/ Seleciona a partir do nó raiz
// Seleciona nós a partir do nó corrente que coincide
com a seleção, independente da sua localização
. Seleciona o nó corrente
.. Seleciona o pai do nó corrente
@ Seleciona atributos
12
Exemplos
Expressão Resultado
bookstore Seleciona o elemento bookstore (o nó corrente é
o nó raiz)
/bookstore Seleciona o elemento bookstore
Obs: uma expressão que inicia com / representa um
caminho absoluto
bookstore/book Seleciona todos os elementos book que são filhos
de bookstore (a raiz é o nó corrente)
//book Seleciona todos os elementos book onde quer que
estejam
bookstore//book Seleciona todos os elementos book que são
descendentes de bookstore
//@lang Seleciona todos os atributos lang
13
Predicados
Utilizados para encontrar um nó específico ou um nó que
contém um valor específico
Sempre são inseridos entre colchetes
Expressão Resultado
/bookstore/book[1] Seleciona o primeiro book que é filho
de bookstore
/bookstore/book[last()] Seleciona o último book que é filho
de bookstore
/bookstore/book[position()<3] Seleciona os dois primeiros book que
são filhos de bookstore
//title[@lang] Seleciona todos os elementos title
que possuem um atributo lang
14
Predicados
Expressão Resultado
//title[@lang=‘eng’] Seleciona todos os elementos title
que possuem o atributo lang com
um valor igual a ‘eng’
/bookstore/book[price>35.00] Seleciona todos os elementos book
filhos de bookstore e que possuem
um elemento price com valor acima
de 35
/bookstore/book[price>35.00]/title Seleciona todos os elementos title
dos elementos book filhos de
bookstore e que possuem um
elemento price com valor acima de
35
15
Caracteres curinga
Utilizados para selecionar elementos
desconhecidos
Curinga Descrição
* Qualquer nó de elemento
@* Qualquer nó de atributo
node() Qualquer nó de qualquer tipo
16
Exemplos
Expressão Resultado
/bookstore/* Seleciona todos os elementos filhos de
bookstore
//* Seleciona todos os elementos do documento
//title[@*] Seleciona todos os elementos title que
possuem algum atributo
17
Múltiplos caminhos
O operador | permite que uma expressão possua
vários caminhos
Expressão Resultado
//book/title | //book/price Seleciona todos os elementos title e
price de todos os elementos book
//title | //price Seleciona todos os elemenos title e
price do documento
/bookstore/book/title | //price Seleciona todos os elementos title
filhos de book de bookstore e todos os
elementos price
18
Eixos
Um eixo define um conjunto de nós relativos ao
nó corrente
Eixo Resultado
ancestor Seleciona todos os ancestrais do nó corrente
ancestor-or-self Seleciona todos os ancestrais do nó corrente e o
próprio nó corrente
attribute Seleciona todos os atributos do nó corrente
child Seleciona todos os filhos do nó corrente
descendant Seleciona todos os descendentes do nó corrente
descendant-or-self Seleciona todos os descendentes do nó corrente
e o próprio nó corrente
19
Eixos
Eixo Resultado
following Seleciona tudo no documento após a tag de
fechamento do nó corrente
following-sibling Seleciona todos os nós irmãos após o nó corrrente
namespace Seleciona todos os nós de namespace do nó
corrente
parent Seleciona o pai do nó corrente
preceding Seleciona tudo no documento que se encontra
antes da tag de abertura do nó corrente
preceding-sibling Seleciona todos os nós irmãos antes do nó
corrente
self Seleciona o nó corrente
20
Exemplos
Seleciona todos os nós book filhos do nó corrente
child::book
Seleciona o atributo lang do nó corrente
attribute::lang
Seleciona todos os filhos do nó corrente
child::*
Seleciona todos os atributos do nó corrente
attribute::*
Seleciona todos os nós de texto filhos do nó
corrente
child::text()
21
Exemplos
Seleciona todos os nós filhos do nó corrente
child::node()
Seleciona todos os nós book descendentes do nó corrente
descendant::book
Seleciona todos os nós book ancestrais do nó corrente
ancestor::book
Seleciona todos os nó book ancestrais do nó corrente e o
próprio nó corrente caso o mesmo seja um book
ancestor-or-self::book
Seleciona todos os nós price netos do nó corrente
child::*/child::price
22
Operadores
Operador Descrição Exemplo Retorno
| Processa dois //book | //cd Conjunto de nós com todos
conjuntos de nós os elementos cd e book
+ Adição 6+4 10
- Subtração 6–4 2
* Multiplicação 6*4 24
div Divisão 8 div 4 2
= Igualdade price=9.80 Verdadeiro caso price seja
igual a 9.80 e falso em caso
contrário
23
Operadores
Operador Descrição Exemplo Retorno
!= Desigualdade price!=9.80 Verdadeiro caso price seja
diferente de 9.80 e falso
em caso contrário
< Menor que price<9.80 Verdadeiro caso price seja
menor que 9.80 e falso em
caso contrário
> Maior que price>9.80 Verdadeiro caso price seja
maior que 9.80 e falso em
caso contrário
<= Menor ou igual price<=9.80 Verdadeiro caso price seja
menor ou igual a 9.80 e
falso em caso contrário
24
Operadores
Operador Descrição Exemplo Retorno
>= Maior ou igual price>=9.80 Verdadeiro caso price seja
maior ou igual a 9.80 e
falso em caso contrário
or Ou price=9.80 or Verdadeiro caso price seja
price=9.70 igual a 9.80 ou a 9.70 e
falso em caso contrário
and E price>9.00 and Verdadeiro caso price seja
price<9.90 maior que 9.00 e menor
que 9.90. Falso em caso
contrário
mod Resto da 5 mod 2 1
divisão
25
Funções
Pode-se utilizar as funções definidas nas especificações XPath e
XSL
Algumas funções presentes na especificação XPath 1.0:
Função Descrição
last() Retorna o índice do último elemento a partir do nó
corrente
Ex: /bookstore/book[last()] – Retorna o último
livro em bookstore
count(node-set) Retorna a quantidade de nós presentes em node-set
Ex: count(/bookstore/book) – Retorna a
quantidade de nós book filhos de bookstore
text() Retorna o conteúdo do nó corrente como texto
Ex: /bookstore/book[1]/title/text() – Retorna
“Harry Potter” 26
Referências
[Link]
[Link]/~danielle
TITTEL, Ed. Teoria e Problemas de XML
(coleção Schaum) – Porto Alegre: Bookman,
2003
[Link]
27