XPath
• Encontrar os elementos através de caminhos
que indiquem o contexto de tais elementos
• Para chegar a um elemento:
– Como em URL:
• Uso de caminho absoluto
– Especificar toda a hierarquia de elementos de uma árvore
XML, desde a raiz
• Uso de caminho relativo
– Especificar, em qualquer ponto do caminho, elementos
relativos ao elemento contexto
XPath
• XPath usa expressões
– Strings com símbolos significativos;
– Identificar o elemento titulo que é filho direto
de um elemento livro:
livro/titulo
String com símbolo
significativo “/”
XPath - Expressões
• Expressão é uma string de texto
– Consiste de instruções para selecionar alguma estrutura de
marcação
• Símbolos especiais:
"/", "*", ".", ".."
• Expressão mais simples:
//livro
• Expressões podem ser usadas para selecionar
– atributos, comentários, instruções de processamento, ou seqüência
de texto entre elementos
• São usadas em diferentes maneiras, para diferentes
propósitos.
Caminhos Absolutos e
Relativos
• Exemplo:
<curriculo>
<curriculo>
<dados>
<dados>
<dados>
<nome>
<nome> </nome>
</nome>
<cpf> </cpf>
Expressão XPath:
<fone> </fone>
</dados>
/curriculo /dados/nome/../.. /experiencia
<experiencia>
<profissional>
<experiencias>
<ano>1996</ano> Absoluto – desde a raiz Relativo – a “nome”
<cargo>Analista</cargo>
<experiencias>
</profissional>
<academica> ...
</academica>
</experiencia>
</curriculo>
Caminhos absolutos
• Usado quando quer selecionar algo, independente
do contexto corrente
– Para indicar a raiz do documento, usa-se “/”
/livro/titulo
– Selecionar ocorrências de um elemento cujos
antecessores não importa, usa-se “//”
//para
Filtros
• Usados para remover itens indesejados de uma lista
– Selecionar todos os parágrafos de todos os capítulos.
/livro/capitulo/paragrafo
– Um filtro pode ser usado para selecionar um elemento
que está em uma posição determinada
• Selecionar o primeiro parágrafo do capítulo
/livro/capitulo/paragrafo[1]
– Usa "[", e "]", para manipular o predicado. Os resultados
do teste são um valor booleano, e a seleção só ocorre
quando o valor é true.
Testes de posição
• Função position() retorna a localização
sequencial do elemento testado
paragrafo[position()=1]
ou
paragrafo[1]
• Função last() localiza o último elemento
paragrafo[last()]
• Função count() descobre quantas ocorrências de
um elemento particular há no documento
nota[count(paragrafo)=1]
Testes de elementos
• Selecionar um elemento, indicando o filho
– Selecionar um elemento nota se ele contém diretamente
um elemento tituto
nota[titulo]
• Testar o valor de um elemento:
– Selecionar a nota cujo titulo seja “Nota inicial”
nota[titulo=”Nota inicial”]
Testes de atributos
• O símbolo @ é usado para representar um
atributo e precede o nome do atributo
– Selecionar o atributo autor do elemento livro:
livro/@autor
– Seleciona todo parágrafo com o valor do atributo
tipo igual a ‘secreto’:
para[@tipo='secreto']
Testes de boleanos
• Função not() para reverter o resultado do
teste
– Selecionar todas as notas, exceto a terceira:
nota[not(position()=3)]
– Selecionat uma nota que não contém um
elemento titulo:
nota[not(titulo)]
– Selecionar todos os capítulos, exceto aquele
que tenha o atributo numero com valor 10:
capitulo[not[@numero='10']]
Comparações
• Comparar dois números
paragrafo[position()=3]
• Comparar expressões booleanas e strings
paragrafo[titulo=”primeiro paragrafo"]
• Selecionar todos paragraf, mas não o último
paragrafo[position()!=last()]
• Outras comparações:
paragrafo[position()>2]
paragrafo[position()>=3]
paragrafo[position()>2 and position()<last()]
paragrafo[position()=2 or position() = 4]
Tratamento de Strings
• Função contains() retorna true se a string contém o texto
dado
– Usando “text()”, testa somente o texto do elemento
• Selecionar titulo que contenha a palavra “relacional”
titulo[contains(text(), ”relacional")]
<titulo>Modelo relacional</titulo>
– Usando “.”, testa o elemento secao e seus subelementos
• Selecionar secao que contenha a palavra “relacional”
secao[contains(., ”relacional")]
<secao>Esta secao apresenta...
<paragrafo>O modelo relacional ...</paragrafo>
<paragrafo>Como já mencionado, ...</paragrafo>
</secao>
Tratamento de Strings
• Função starts-with() texta o texto no começo da
string. Não pode haver espaço em branco.
– Selecionar titulo que inicie com a palavra “Introdução”
titulo[starts-with(., "Introdução")]
<titulo>Introdução a JSP</titulo>
<titulo>_Introdução a JSP</titulo>
Não funciona!
Tratamento de Strings
• Função string() converte o valor do argumento
para string
– Exemplo:
string(nota[2])
Retorna o valor em caracter “2”
• Função normalize-space()
– remove espaços no início e final
– reduz vários espaços em branco para um único caractere
espaço
titulo[contains(normalize-space(.), ”Introdução a JSP")]
<titulo>
Introdução
a
JSP
</titulo>
Tratamento de Strings
• Função concat() concatena strings. Pode ter um ou mais
parâmetros:
Concat(text1, texto2,..., textn)
– Retornar a seção que fale da autora do livro
//secao[contains(text(),concat (,/../../nome[text()],
/../../sobrenome[text()]))]
<livro>
<autor>
<nome>Ana</nome>
<sobrenome>Silva</sobrenome>
</autor>
<secao> A autora Ana Silva ...</secao>
<secao> ... </secao>
</livro>
Tratamento de Strings
• Função translate() converte caracteres de
acordo com um esquema de mapeamento.
– Uso: comparações case-insensitive
– Parâmetros: string para converter, caracteres para
modificar no texto fonte, e valores a serem colocados
paragrafo[contains(translate(normalize-space(.),
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"), ”ELEMENTO")]
<paragrafo>EM XML, UM ELEMENTO É ...</paragrafo>
<paragrafo>Um documento XML deve possuir um elemento raiz
...</paragrafo>
• os dois elementos paragrafo
são recuperados
O que está em minúsculo é trocado
pelo maiúsculo. O que está em
maiúsculo é comparado normalmente
Tratamento de Strings
• Função string-length() determina o número de
caracteres em uma string
paragrafo[string-length(.)=15]
<paragrafo> quinze letras </paragrafo>
<paragrafo>123456789012345</paragrafo>
• Função substring-before() extrai texto do início
da string
– Parâmetros: a string de onde será extraído o texto, os
caracteres que terminam o prefixo a serem extraídos
titulo[contains(.,substring-before(.,”*"))]
<titulo>Contrução dos arquivos *.gif</titulo>
Tratamento de Strings
• Função substring-after() extrai texto do final da string
– Parâmetros: a string de onde será extraído o texto, os caracteres que
terminam o prefixo a serem extraídos
titulo[contains(.,substring-after(.,”*"))]
<titulo>Contrução dos arquivos *.gif</titulo>
• Função substring() extrai qualquer fragmento de uma
string
– Parâmetros: a string fonte, posição de deslocamento, número de
caracteres a extrair
paragrafo[substring(.,13,5)="XPath"]
5 caracteres
<paragrafo>A linguagem XPath</paragrafo>
------------13
<paragrafo>Este parágrafo com XPath não é
recuperado</paragrafo>
Tratamento de Números
• Função number() converte o valor do argumento
para números.
– Expressões booleanas são interpretadas como:
• 1 para true
• 0 para false
• Função round()
– Converte reais para o inteiro mais próximo equivalente
• Função floor()
– Converte reais para o inteiro inferior mais próximo
equivalente
Tratamento de Números
• Função ceiling()
– Converte reais para o inteiro superior mais próximo
equivalente
• Operadores + e - podem ser usados:
– nota[3] é equivalente a nota[1 + 2]
• Função mod()
– Fornece o resto de uma divisão truncada
– Selecionar parágrafos pares:
paragrafo[position() mod 2 = 0]
Outras funções
• Comentários:
– Selecione comentários que estejam dentro de livro
//livro/comment()
• Instruções de processamento
– Encontre instruções de processamento que estejam dentro
do elemento pessoa
//livro/processing-instruction()
Resumo das funções, XPath 1.0
Tabela baseada nas funç
funções apresentadas na pá
página da W3C
Funções para nodos (elementos)
Nome
count()
Sintaxe
Descrição
count(node-set) = number
id()
id(value) = node-set
last()
last() = number
local-name()
local-name(node)= string
name()
namespace-uri()
name(node) = string
namespace-uri(node) = uri
position()
position() = number
Retorna o número de nodos de
um node-set
Seleciona elementos pelo seu
ID único
Retorna o número da posição
do ultimo nodo em uma lista
de nodos processados
Retorna a parte local de um
nodo. Um nodo geralmente
consiste de um prefixo, uma
vírgula e seguida de um nome
local
Retorna o nome de um nodo
Retorna a URI da namespace
de um nodo específico
Retorna a posição em uma
lista de nodos do nodo que
está sendo processado
Resumo das funções, XPath 1.0
Tabela baseada nas funç
funções apresentadas na pá
página da W3C
Nome
Funções Sintaxe
para string
e Exemplo
concat()
contains()
normalizespace()
starts-with()
string()
string=concat(val1, val2, ..)
Exemplo:
concat('The',' ','XML')
Resultado: 'The XML'
bool=contains(val,substr)
Exemplo:
contains('XML','X')
Resultado: true
string=normalizespace(string)
Exemplo:
normalize-space(' The
XML
')
Resultado: 'The XML'
bool=startswith(string,substr)
Exemplo:
starts-with('XML','X')
Resultado: true
string(value)
Exemplo:
string(314)
Resultado: '314'
Descrição
Retorna a concatenação de todos
os seus argumentos
Retorna true se a segunda string
está contida na primeira
Normaliza os espaços em
broncos para um só
Retorna true se a primeira string
inicia com a segunda
Converte o valor do argumento
para string
Resumo das funções, XPath 1.0
Tabela baseada nas funç
funções apresentadas na pá
página da W3C
Nome
Sintaxe
Funções
parae Exemplo
string
stringlength()
substring()
substringafter()
substringbefore()
translate()
number=string-length(string)
Exemplo:
string-length('Beatles')
Resultado: 7
string=substring(string,start,length)
Exemplo:
substring('Beatles',1,4)
Resultado: 'Beat'
string=substring-after(string,substr)
Exemplo:
substring-after('12/10','/')
Resultado: '10'
string=substring-before(string,substr)
Exemplo:
substring-before('12/10','/')
Resultado: '12'
string=translate(value,string1,string2)
Exemplo:
translate('12:30','30','45')
Resultado: '12:45'
translate('12:30','03','54')
Resultado: '12:45'
translate('12:30','0123','abcd')
Resultado: 'bc:da'
Descrição
Retorna o número de
caracteres em uma string
Retorna a parted a string
indicada nos argumentos
Retorna a parte da string
que está depois do
argumento substr
Retorna a parted a string
que está antes do
argumento substr
Executa reposição
character a character.
Resumo das funções, XPath 1.0
Tabela baseada nas funç
funções apresentadas na pá
página da W3C
Nome
ceiling()
floor()
number()
round()
sum()
Funções para numéricos
Sintaxe e Exemplo
ceiling(number) = number
Exemplo:
ceiling(3.14)
Resultado: 4
floor(number) = number
Exemplo:
floor(3.14)
Resultado: 3
number(value) = number
Exemplo:
number('100')
Resultado: 100
round(number)= integer
Exemplo:
round(3.14)
Resultado: 3
sum(nodeset)=number
Exemplo:
sum(/cd/price)
Descrição
Retorna o menor inteiro que não pe
menor do que o argumento
Retorna o maior inteiro que não é maior
do que o argumento
Converte o valor do argumento para um
numérico
Arredonda o argumento ao inteiro mais
próximo
Retorna o valor total de um conjunto
numérico de valores em um node-set
Resumo das funções, XPath 1.0
Tabela baseada nas funç
funções apresentadas na pá
página da W3C
Funções
booleanas
Sintaxe e Exemplo
Nome
boolean()
bool=boolean(value)
false()
false()
lang()
Exemplo:
number(false())
Resultado: 0
bool=lang(language)
not()
bool=not(condition)
true()
Exemplo:
not(false())
true()
Exemplo:
number(true())
Resultado: 1
Descrição
Converte o argumento e retorna
true ou false
Retorna false
Retorna true se a linguagem do
argumento casa com a linguagem
do elemento xsl:lang
Retorna true se a condição de
argumento for falsa, e falsa se a
condição for verdadeira
Retorna true
Download

XPath