Consultado Documentos XML com XPATH Vânia Maria Ponte Vidal vvidal@lia.ufc.br
XPATH É linguagem para referenciar partes de um documento XML. Define uma biblioteca de funções padrões para trabalhar com strings, números e booleanos. Foi projetada para ser usada por XSLT, XPointer e outros softwares. Sem XPath não seria possível criar documentos XSLT. Modela um documento XML como uma árvore de nós: nó elemento, nó atributo, nó texto, etc.
XPATH XPath usa expressões de caminho para identificar nós num documento XML. Expressões de caminho são parecidas com as expressões de caminho usadas no sistema de arquivo de um computador. Se o caminho XPath começa com uma barra(/), significa um caminho absoluto para o elemento. Se o caminho XPath começa com duas barras(//), significa que todos os elementos que satisfizerem o critério serão selecionados, ainda se eles estiverem em diferentes níveis na árvore.
ESTUDO DE CASO I <!ELEMENT livraria (livro)+> <!ELEMENT livro Elemento Raiz livraria <!ELEMENT livraria (livro)+> <!ELEMENT livro (titulo,editora,preço,autor+)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT editora (#PCDATA) > <!ELEMENT preco (#PCDATA) > <!ELEMENT autor (email?,nome)> <!ELEMENT email (#PCDATA) > <!ELEMENT nome (#PCDATA) > <!ATTLIST livro ISBN CDATA #REQUIRED]> livro livro @ISBN titulo editora preço autor autor email nome email nome 1234 Inside XML New Riders 100,00 Holz@cs.br stev@cs.br Holzner Steven Definição da DTD: livraria.dtd
XPATH Exemplo(1) Obtenha todas as informações do livro cujo título é “Inside XML”. document(“liv.xml” ) / livraria / livro[titulo =“Inside XML”]
XPATH Exemplo(2) Obtenha as informações dos autores do livro cujo título é “Inside XML”. $liv / livraria / livro [titulo =“Inside XML”] / autor $liv= document(“liv.xml” )
XPATH Exemplo(3) $liv / livraria / livro [autor/nome =“steven”] Liste os livros de autoria de Steven $liv / livraria / livro [autor/nome =“steven”]
XPATH Exemplo(4) $liv / livraria / livro [autor/nome =“steven”]/titulo Liste o título dos livros de autoria de Steven $liv / livraria / livro [autor/nome =“steven”]/titulo $liv / livraria / livro [autor/nome =“steven”]/titulo/text()
XPATH Exemplo(5) Liste ISBN, título e editora dos livros cujo o autor é “Steven”
XPATH Exemplo(6) $liv / livraria / livro [autor/nome =“steven”]/@isbn Liste o isbn dos livros de autoria de Steven $liv / livraria / livro [autor/nome =“steven”]/@isbn Nomes de atributos são precedidos com @ $liv / livraria / livro [autor/nome =“steven”]/@* Obtém todos os atributos do elemento no contexto corrente
Estudo de Caso II <catalogo> <cd pais =“Brasil”> <titulo>Milagreiro</titulo> <artista>Djavan</artista> <preco>15,00</preco> </cd> <titulo>O mito</titulo> <artista>Elis Regina</artista> <preco>20,00</preco> <titulo>Realce</titulo> <artista>Gilberto Gil</artista> </catalogo> <titulo> <cd pais=“Brasil”> <artista> <preco> catalogo 15,00 Djavan Milagreiro O mito Elis Regina Realce 20,00 Gilberto Gil
Xpath $catalogo / catalogo / cd / * Selecionar todos os elementos filhos de todos os elementos cd do elemento catalogo . $catalogo / catalogo / cd / * Curingas podem ser usados para selecionar elementos XML desconhecidos.
$catalogo /catalogo/*/preço Selecionar todos os elementos preço que são elementos netos do elemento catalogo: $catalogo /catalogo/*/preço Selecionar todos os elementos preco que têm dois ancestrais: $catalogo /*/*/preco <titulo> <cd pais=“Brasil”> <artista> <preco> catalogo 15,00 Djavan Milagreiro O mito Elis Regina Realce 20,00 Gilberto Gil
Xpath $catalogo /catalogo/cd[1] $catalogo/catalogo/cd[last()] Obtenha o primeiro elemento cd filho do elemento catálogo: $catalogo /catalogo/cd[1] Obtenha o último elemento cd filho do elemento catálogo: $catalogo/catalogo/cd[last()] <titulo> <cd pais=“Brasil”> <artista> <preco> catalogo ... 15,00 Djavan Milagreiro Realce Gilberto Gil
Selecionar todos os elementos cd filho do elemento catálogo que têm um elemento preco: <titulo> <cd pais=“Brasil”> <artista> <preco> catalogo 15,00 Djavan Milagreiro O mito Elis Regina Realce 20,00 Gilberto Gil $cat /catalogo/cd[preco] Selecionar todos os elementos cd filho do elemento catálogo que têm um elemento preco com o valor de 15,00: $cat /catalogo/cd[preco=15,00] Selecionar todos os elementos preco dos elementos cd cujo elemento preco com valor de 15,00: /catalogo/cd[preco=15,00]/preco
$cat//@país $cat //cd[@país] $cat //cd[@*] Selecionar todos os atributos pais: <titulo> <cd pais=“Brasil”> <artista> <preco> catalogo 15,00 Djavan Milagreiro O mito Elis Regina Realce 20,00 Gilberto Gil $cat//@país Selecionar todos os elementos cd que tem um atributo pais: $cat //cd[@país] Selecionar todos os elementos cd que tem algum atributo: $cat //cd[@*]
XPATH parent:: - Pai do elemento contexto Pode-se selecionar pai, filhos e irmãos, usando as expressões: parent:: - Pai do elemento contexto child:: - filho do elemento contexto preceding-sibling:: - irmão que precede following-sibling:: - irmão que segue Ancestor:: - ancestrais do elemento contexto Descendante::- descendentes do elemento contexto.