Consultado Documentos XML com XPATH Vânia Maria Ponte Vidal [email protected] 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 Elemento Raiz <!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]> livraria livro @ISBN titulo editora preço livro autor email 1234 Inside New 100,00 XML Riders [email protected] autor nome email Holzner [email protected] Definição da DTD: livraria.dtd nome Steven 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) Liste os livros de autoria de Steven $liv / livraria / livro [autor/nome =“steven”] XPATH Exemplo(4) 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) 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> <cd pais =“Brasil”> <titulo>O mito</titulo> <artista>Elis Regina</artista> <preco>20,00</preco> </cd> <cd pais =“Brasil”> <titulo>Realce</titulo> <artista>Gilberto Gil</artista> <preco>15,00</preco> </cd> </catalogo> catalogo <cd pais=“Brasil”> <titulo> Milagreiro <artista> Djavan <preco> 15,00 <cd pais=“Brasil”> <titulo> O mito <artista> Elis Regina <preco> 20,00 <cd pais=“Brasil”> <titulo> Realce <artista> Gilberto Gil <preco> 15,00 Xpath 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. 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 catalogo <cd pais=“Brasil”> <titulo> Milagreiro <artista> Djavan <preco> 15,00 <cd pais=“Brasil”> <titulo> O mito <artista> Elis Regina <preco> 20,00 <cd pais=“Brasil”> <titulo> Realce <artista> Gilberto Gil <preco> 15,00 Xpath Obtenha o primeiro elemento cd filho do elemento catalogo catálogo: <cd pais=“Brasil”> $catalogo /catalogo/cd[1] Obtenha o último elemento cd filho do elemento catálogo: $catalogo/catalogo/cd[last()] <titulo> Milagreiro <artista> Djavan <preco> 15,00 ... <cd pais=“Brasil”> <titulo> Realce <artista> Gilberto Gil <preco> 15,00 Selecionar todos os elementos cd filho do elemento catálogo que têm um elemento preco: catalogo $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] <cd pais=“Brasil”> <titulo> Milagreiro <artista> Djavan <preco> 15,00 <cd pais=“Brasil”> <titulo> O mito <artista> Elis Regina <preco> 20,00 <cd pais=“Brasil”> •Selecionar todos os elementos preco dos elementos cd cujo elemento preco com valor de 15,00: /catalogo/cd[preco=15,00]/preco <titulo> Realce <artista> Gilberto Gil <preco> 15,00 Selecionar todos os atributos pais: catalogo $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[@*] <cd pais=“Brasil”> <titulo> Milagreiro <artista> Djavan <preco> 15,00 <cd pais=“Brasil”> <titulo> O mito <artista> Elis Regina <preco> 20,00 <cd pais=“Brasil”> <titulo> Realce <artista> Gilberto Gil <preco> 15,00 XPATH 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.