SlideShare uma empresa Scribd logo
1 de 41
XPath
ƒ O significado de um elemento pode depender de seu
  contexto.
ƒ Navegação dentro do documento XML para encontrar este
  contexto
ƒ Encontrar os elemento através de caminhos
ƒ Para chegar a um elemento:
   9 Como em URL:
      • Uso de caminho absoluto - Especificar toda a hierarquia de elementos de
        uma árvore XML
      • Uso de caminho relativo - Especificar, em qualquer ponto do caminho,
        elementos relativos ao elemento contexto
ƒ Explorar a estrutura hierárquica do documento
XPath
ƒ Localizar com precisão um elemento de interesse
ƒ Exemplo: Obter o último nome do autor de um livro
<livro>
    <autor>
     <nome>
       <primeiro>John</primeiro>
       <ultimo>Smith</ultimo> --->> RESULTADO CORRETO
     </nome>
    </author>    ...
    <chapter>
     <autor>
      <nome>
        <primeiro>John</primeiro>
        <ultimo>Smith</ultimo> --->> RESULTADO INCORRETO
      </nome>
     </author>
    </chapter>
</livro>
XPath
ƒ XPath usa expressões
  9 Strings com símbolos significativos;
  9 Identificar o elemento titulo que é filho direto de um
    elemento livro:

    livro/titulo                    String com símbolo
                                    significativo "/"
É como uma árvore de diretórios...




           C:Arquivo>cd Artigos
           C:ArquivoArtigos>cd aceitos
           C:ArquivoArtigosaceitos>cd ..
           C:ArquivoArtigos>cd 
           C:>
XPath - Expressões
ƒ Expressão é uma string de texto que 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
   9 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
ƒ Usado quando quer selecionar algo, independente
  do contexto corrente
  9 Para indicar a raiz do documento, usa-se "/"
     /book/title
  9 Selecionar ocorrências de um elemento cujos
    antecessores não importam, usa-se "//"
    //para
Caminhos
ƒ Quando os nomes de elementos entre o elemento
  contexto e o descendente requerido não é
  conhecido
   9Ex: selecionar títulos de capítulos e da introdução
           /livro/introducao/titulo e
           /livro/capitulo/titulo
           /livro/*/titulo
ƒ Múltiplos "*" podem ser usados para selecionar um
  maior nível de profundidade
  9 Um “*” para cada nível
Caminhos
ƒ Uma forma abreviada para os múltiplos "*" é //
  9 seleciona todos os elementos paragrafo que ocorrem em
    qualquer lugar de capitulo

  /capitulo//paragrafo

ƒ Para selecionar todos os paragrafo diretamente
  dentro do elemento corrente:
   //paragrafo
ƒ Seleção do elemento corrente:
  .
Exercício 1
Usando o documento XML fornecido, crie expressões
   XPath para as seguintes consultas:

  1. Selecionar as instituições dos autores do artigo
  2. Selecionar todos os parágrafos das seções do artigo
  3. Selecionar nomes dos autores do artigo propriamente
     dito e das referencias bibliográficas
  4. Selecionar pai do elemento endereco
  5. Selecionar avô do elemento paragrafo
  6. Selecionar todas as ocorrências de endereço
Filtros
ƒ Usados para remover itens indesejados de
  uma lista para criar uma nova lista. Ex:
  9Seleciona os parágrafos de todos os capítulos, no
   entanto somente o primeiro parágrafo em cada
   capítulo.
     /book/chapter/para[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 elementos e atributos
ƒ Elementos
  9O nome de um elemento pode aparecer
   representando um elemento que deve estar
   presente como um filho
    • Selecionar um elemento nota se ele contém
      diretamente um elemento tituto : /nota[titulo]


  9O valor de um elemento pode ser testado:
    • Selecionar a nota cujo titulo seja "Inicial":
           /nota[titulo="Inicial"]
Testes de elementos e atributos
ƒ Atributos
  9podem ser selecionados dependendo do valor ou
   da existência ou não de um atributo
  9O 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']
AND e OR
ƒ Como os filtros são expressões booleanas, pode-se
  usar AND e OR

ƒ Exemplo:
  //note[titulo=“A” and ano=2000]



  Atenção: o XML Exchanger Lite só aceita and e or
    minúsculos
Exercício 2
1. Selecionar o autor cujo nome é Maria Ana
2. Selecionar a obra da bibliografia cujo ano é 1999 e
   o local é University of Pennsylvania
3. Selecionar a seção cujo número é s2 e que contém
   um parágrafo cujo conteúdo é ...
4. Selecionar o atributo título das seções
Testes de posição
ƒ Função position() retorna a localização
  sequencial do elemento testado
  9Selecionar somente o primeiro parágrafo dentre
   os já selecionados pelo padrão

  /paragrafo[position()=1]
        ou
   /paragrafo[1]
Testes de posição
ƒ Função last() localiza o último elemento (retorna o
  número da posição do último elemento)
  9 Selecionar o último parágrafo
    //paragrafo[last()]

ƒ Função count() retorna o número de ocorrências de
  um elemento

  9 Selecionar seções que contenham apenas dois
    parágrafos
    //secao[count(paragrafo)=2]
Função NOT
ƒ Função not() para reverter o resultado do
  teste
  9Selecionar todas as notas, exceto a terceira
   //nota[not(position()=3)]
  9Selecionar uma nota que não contém um
   elemento título
   //nota[not(titulo)]
  9Selecionar todos os capítulos, exceto aquele que
   tenha o atributo número com valor 10
   //capitulo[not(@numero='10’)]
Comparações
ƒ Selecionar todos paragrafos, 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(par1, par2) retorna true se par1 contém
  o texto em par2

  par1 pode ser text() ou .
Função contains()
ƒ Usando "text()", testa somente o texto do elemento

  9Selecionar titulo que contenha a palavra
   "relacional"

  //titulo[contains(text(), "relacional")]
  <titulo>Modelo relacional</titulo>
Tratamento de Strings
ƒ Usando ".", testa o elemento secao e seus
  subelementos

  9 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() testa o texto no começo da
  string. Não pode haver espaço em branco.
  9 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
    9 Exemplo:
    string(//capitulo[1]/@numero), retorna o valor do atributo numero do
       primeiro capitulo, em formato string

ƒ Função normalize-space()
    9 No meio da string, reduz vários espaços em branco para um único
      caractere espaço
    9 Remove completamente os espaços do início e fim da string

//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,..., texton)

    9 Retornar a seção que fale da autora do livro

    //secao[contains(.,concat (./../autor/nome/text(), “ ”,
   ../autor/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.
    9 Uso: comparações case-insensitive
    9 Parâmetros: string para converter, caracteres para modificar no texto
      fonte, e valores a serem colocados


 //paragrafo[contains(translate(normalize-space(.), "abcdefghijklmnopqrstuvwxyz",
   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "ELEMENTO")]
                                                             O que está em minúsculo é
                                                           trocado pelo maiúsculo. O que
                                                          está em maiúsculo é comparado
                                                                   normalmente
<paragrafo>EM XML, UM ELEMENTO É ...</paragrafo>
<paragrafo>Um documento XML deve possuir um elemento raiz ...</paragrafo>

    9 os dois elementos paragrafo são recuperados
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
   9 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
   9 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
   9 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.
  9 Expressões booleanas são interpretadas como:
     • 1 para true
     • 0 para false
Tratamento de Números
ƒ Operadores + e - podem ser usados:
  9 //nota[3] é equivalente a /nota[1 + 2]


ƒ Função mod()
  9 Fornece o resto de uma divisão truncada
  9 Selecionar parágrafos pares:
   //paragrafo[position() mod 2 = 0]
Filtros Múltiplos
ƒ Usados para combinar um teste de posição e um outro tipo de teste
   9 Selecionar nomes de companhias, e então extrair o terceiro nome da lista
      //nome[companhia][3]
   <nomes>
   <nome><pessoa>...</pessoa></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><pessoa>...</pessoa></nome>
   </nomes>


   <nomes>
   <nome><pessoa>...</pessoa></nome>
   <nome><companhia>...</companhia></nome>
   <nome><pessoa>... </pessoa></nome>
   </nomes>
Filtros Múltiplos
ƒ Usados para combinar um teste de posição e um outro tipo de teste
   9 Selecionar o terceiro nome, fornecendo o nome da companhia (só seleciona se
     for uma companhia!)
      //nome[3][companhia]
   <nomes>
   <nome><pessoa>...</pessoa></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><companhia>...</companhia></nome>
   <nome><pessoa>...</pessoa></nome>
   </nomes>
   <nomes>
   <nome><pessoa>...</pessoa></nome>
   <nome><companhia>...</companhia></nome>
   <nome><pessoa>... </pessoa></nome>
   </nomes>
Testes de boleanos
ƒ Função boolean() avalia uma expressão e retorna um valor
  boleano. Se o argumento for:
   9 Número: Retorna TRUE se for diferente de zero
     boolean(3) --> TRUE
     boolean(0) --> FALSE
   9 Conjunto de nodos: Retorna TRUE se houver ao menos um nodo
     boolean(title) --> TRUE
     boolean() --> FALSE
   9 String: Retorna TRUE se o tamanho da string for maior que zero
     boolean("algum texto") --> TRUE
     boolean("") --> FALSE
Outras funções
ƒ Comentários:
  9 Selecione comentários que estejam dentro de livro
     //livro/comment()

ƒ Instruções de processamento
  9 Encontre instruções de processamento que estejam dentro
    do elemento livro

     //livro/processing-instruction()
Exercício 3
ƒ   Usando o mesmo documento XML, crie expressões XPath
    1.   Retorne todas as seções do artigo que possuem pelo menos um
         subelemento figura (use a função boolean)
    2.   Selecione as seções ímpares
    3.   Selecione as seções ímpares que possuem pelo menos um subelemento
         figura
    4.   Selecione os parágrafos que contêm uma instrução de processamento
    5.   Encontre autores que possuam "Ana" no nome. Não devem estar nas
         referencias bibliográficas.
    6.   A versão do artigo
    7.   Selecione o parágrafo que tenha ambos os atributos "numero" e "tipo"
    8.   Nome do(s) autor(res) da bibliografia cujo titulo da obra é "Union Types for
         Semistructured Data ".
    9.   Selecione o ano da publicação de bibliografias, cujo nome do autor contenha
         a palavra "Abiteboul"
Exercício 3
 10. Um parágrafo cujo tamanho da string que ele contém é 27
 11. Selecione o terceiro parágrafo de uma seção
 12. Selecione um parágrafo que contenha o nome do segundo autor do artigo e
     sua instituição. Entre estes dois dados existe a string "from“
 13. Selecione todo e qualquer parágrafo que tenha a string "two years". Trate o
     uso de maiúsculas e minúsculas!!
 14. Selecionar seções que contenham somente dois parágrafos
 15. Selecione os elementos "ano" descendentes de bibliografia
 16. Encontre a instrução de processamento de algum elemento paragrafo.
Resumo das funções, XPath 1.0
                              Tabela baseada nas funções apresentadas na página da W3C


9   Funções para nodos (elementos)

 Nome               Sintaxe                           Descrição
 count()            count(node-set) = number          Retorna o número de nodos de
                                                      um node-set
 id()               id(value) = node-set              Seleciona elementos pelo seu
                                                      ID único
 last()             last() = number                   Retorna o número da posição
                                                      do ultimo nodo em uma lista
                                                      de nodos processados
 local-name()       local-name(node)= string          Retorna a parte local de um
                                                      nodo. Um nodo geralmente
                                                      consiste de um prefixo, uma
                                                      vírgula e seguida de um nome
                                                      local
 name()             name(node) = string               Retorna o nome de um nodo
 namespace-uri()    namespace-uri(node) = uri         Retorna a URI da namespace
                                                      de um nodo específico
 position()         position() = number               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ções apresentadas na página da W3C


9    Funções para string
 Nome            Sintaxe e Exemplo                 Descrição
 concat()        string=concat(val1, val2, ..)     Retorna a concatenação de todos
                 Exemplo:                          os seus argumentos
                 concat('The',' ','XML')
                 Resultado: 'The XML'
 contains()      bool=contains(val,substr)         Retorna true se a segunda string
                 Exemplo:                          está contida na primeira
                 contains('XML','X')
                 Resultado: true
 normalize-      string=normalize-                 Normaliza os espaços em
 space()         space(string)                     broncos para um só
                 Exemplo:
                 normalize-space(' The   XML
                 ')
                 Resultado: 'The XML'
 starts-with()   bool=starts-                      Retorna true se a primeira string
                 with(string,substr)               inicia com a segunda
                 Exemplo:
                 starts-with('XML','X')
                 Resultado: true
 string()        string(value)                     Converte o valor do argumento
                 Exemplo:                          para string
                 string(314)
                 Resultado: '314'
Resumo das funções, XPath 1.0
                                   Tabela baseada nas funções apresentadas na página da W3C


9      Funções para string
    Nome          Sintaxe e Exemplo                           Descrição
    string-       number=string-length(string)                Retorna o número de
    length()      Exemplo:                                    caracteres em uma string
                  string-length('Beatles')
                  Resultado: 7
    substring()   string=substring(string,start,length)       Retorna a parted a string
                  Exemplo:                                    indicada nos argumentos
                  substring('Beatles',1,4)
                  Resultado: 'Beat'
    substring-    string=substring-after(string,substr)       Retorna a parte da string
    after()       Exemplo:                                    que está depois do
                  substring-after('12/10','/')                argumento substr
                  Resultado: '10'
    substring-    string=substring-before(string,substr)      Retorna a parted a string
    before()      Exemplo:                                    que está antes do
                  substring-before('12/10','/')               argumento substr
                  Resultado: '12'
    translate()   string=translate(value,string1,string2)     Executa reposição
                  Exemplo:                                    character a character.
                  translate('12:30','30','45')
                  Resultado: '12:45'
                  translate('12:30','03','54')
                  Resultado: '12:45'
                  translate('12:30','0123','abcd')
                  Resultado: 'bc:da'
Resumo das funções, XPath 1.0
                                 Tabela baseada nas funções apresentadas na página da W3C


9       Funções para numéricos

Nome        Sintaxe e Exemplo              Descrição
ceiling()   ceiling(number) = number       Retorna o menor inteiro que não pe
            Exemplo:                       menor do que o argumento
            ceiling(3.14)
            Resultado: 4
floor()     floor(number) = number         Retorna o maior inteiro que não é maior
            Exemplo:                       do que o argumento
            floor(3.14)
            Resultado: 3
number()    number(value) = number         Converte o valor do argumento para um
            Exemplo:                       numérico
            number('100')
            Resultado: 100
round()     round(number)= integer         Arredonda o argumento ao inteiro mais
            Exemplo:                       próximo
            round(3.14)
            Resultado: 3
sum()       sum(nodeset)=number            Retorna o valor total de um conjunto
            Exemplo:                       numérico de valores em um node-set
            sum(/cd/price)
Resumo das funções, XPath 1.0
                                 Tabela baseada nas funções apresentadas na página da W3C


9      Funções booleanas
    Nome        Sintaxe e Exemplo         Descrição
    boolean()   bool=boolean(value)       Converte o argumento e retorna
                                          true ou false
    false()     false()                   Retorna false

                Exemplo:
                number(false())
                Resultado: 0
    lang()      bool=lang(language)       Retorna true se a linguagem do
                                          argumento casa com a linguagem
                                          do elemento xsl:lang
    not()       bool=not(condition)       Retorna true se a condição de
                                          argumento for falsa, e falsa se a
                Exemplo:                  condição for verdadeira
                not(false())
    true()      true()                    Retorna true

                Exemplo:
                number(true())
                Resultado: 1
Xpath e Java
ƒ Java tem um pacote para lidar com expressões
  XPath
  9 javax.xml.xpath
  9 Documentação:
    http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/pa
    ckage-summary.html

Mais conteúdo relacionado

Destaque (7)

Literaturaparaaescola 111120211206-phpapp01
Literaturaparaaescola 111120211206-phpapp01Literaturaparaaescola 111120211206-phpapp01
Literaturaparaaescola 111120211206-phpapp01
 
Neuroplasticidade
NeuroplasticidadeNeuroplasticidade
Neuroplasticidade
 
Història del sistema operatiu
Història del sistema operatiuHistòria del sistema operatiu
Història del sistema operatiu
 
Planeta Terra
Planeta TerraPlaneta Terra
Planeta Terra
 
Dicas do enem
Dicas do enemDicas do enem
Dicas do enem
 
Bob esponja. horacio german garcia
Bob esponja. horacio german garciaBob esponja. horacio german garcia
Bob esponja. horacio german garcia
 
Filtro Solar!
Filtro Solar!Filtro Solar!
Filtro Solar!
 

Semelhante a Navegar e selecionar elementos em XML com XPath

Comandos básicos Linux.docx
Comandos básicos Linux.docxComandos básicos Linux.docx
Comandos básicos Linux.docxWallace690884
 
Biblioteca strings profª ms
Biblioteca strings profª msBiblioteca strings profª ms
Biblioteca strings profª msJoelsa Soares
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Pro php and xml web services xml canonical
Pro php and xml web services   xml canonicalPro php and xml web services   xml canonical
Pro php and xml web services xml canonicaldiogofranciscorocha
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
XML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoXML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoGPrimola
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
Aplicando Transformação em XML usando XSLT e XSL-FO - 3Aplicando Transformação em XML usando XSLT e XSL-FO - 3
Aplicando Transformação em XML usando XSLT e XSL-FO - 3Vivian Motti
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Aula II - Criação de sites I
Aula II - Criação de sites IAula II - Criação de sites I
Aula II - Criação de sites Iinfo_cimol
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batchMarcio Pereira
 

Semelhante a Navegar e selecionar elementos em XML com XPath (20)

Comandos básicos Linux.docx
Comandos básicos Linux.docxComandos básicos Linux.docx
Comandos básicos Linux.docx
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
05 classes utilitarias
05   classes utilitarias05   classes utilitarias
05 classes utilitarias
 
Estruturas
EstruturasEstruturas
Estruturas
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Biblioteca strings profª ms
Biblioteca strings profª msBiblioteca strings profª ms
Biblioteca strings profª ms
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Pro php and xml web services xml canonical
Pro php and xml web services   xml canonicalPro php and xml web services   xml canonical
Pro php and xml web services xml canonical
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
XML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoXML e Banco de Dados XML Nativo
XML e Banco de Dados XML Nativo
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
Aplicando Transformação em XML usando XSLT e XSL-FO - 3Aplicando Transformação em XML usando XSLT e XSL-FO - 3
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Oracle XML DB
Oracle XML DBOracle XML DB
Oracle XML DB
 
Aula II - Criação de sites I
Aula II - Criação de sites IAula II - Criação de sites I
Aula II - Criação de sites I
 
Java 06 Strings Arrays
Java 06 Strings ArraysJava 06 Strings Arrays
Java 06 Strings Arrays
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
String
StringString
String
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch
 

Navegar e selecionar elementos em XML com XPath

  • 1. XPath ƒ O significado de um elemento pode depender de seu contexto. ƒ Navegação dentro do documento XML para encontrar este contexto ƒ Encontrar os elemento através de caminhos ƒ Para chegar a um elemento: 9 Como em URL: • Uso de caminho absoluto - Especificar toda a hierarquia de elementos de uma árvore XML • Uso de caminho relativo - Especificar, em qualquer ponto do caminho, elementos relativos ao elemento contexto ƒ Explorar a estrutura hierárquica do documento
  • 2. XPath ƒ Localizar com precisão um elemento de interesse ƒ Exemplo: Obter o último nome do autor de um livro <livro> <autor> <nome> <primeiro>John</primeiro> <ultimo>Smith</ultimo> --->> RESULTADO CORRETO </nome> </author> ... <chapter> <autor> <nome> <primeiro>John</primeiro> <ultimo>Smith</ultimo> --->> RESULTADO INCORRETO </nome> </author> </chapter> </livro>
  • 3. XPath ƒ XPath usa expressões 9 Strings com símbolos significativos; 9 Identificar o elemento titulo que é filho direto de um elemento livro: livro/titulo String com símbolo significativo "/"
  • 4. É como uma árvore de diretórios... C:Arquivo>cd Artigos C:ArquivoArtigos>cd aceitos C:ArquivoArtigosaceitos>cd .. C:ArquivoArtigos>cd C:>
  • 5. XPath - Expressões ƒ Expressão é uma string de texto que 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 9 atributos, comentários, instruções de processamento, ou seqüência de texto entre elementos ƒ São usadas em diferentes maneiras, para diferentes propósitos.
  • 6. Caminhos ƒ Usado quando quer selecionar algo, independente do contexto corrente 9 Para indicar a raiz do documento, usa-se "/" /book/title 9 Selecionar ocorrências de um elemento cujos antecessores não importam, usa-se "//" //para
  • 7. Caminhos ƒ Quando os nomes de elementos entre o elemento contexto e o descendente requerido não é conhecido 9Ex: selecionar títulos de capítulos e da introdução /livro/introducao/titulo e /livro/capitulo/titulo /livro/*/titulo ƒ Múltiplos "*" podem ser usados para selecionar um maior nível de profundidade 9 Um “*” para cada nível
  • 8. Caminhos ƒ Uma forma abreviada para os múltiplos "*" é // 9 seleciona todos os elementos paragrafo que ocorrem em qualquer lugar de capitulo /capitulo//paragrafo ƒ Para selecionar todos os paragrafo diretamente dentro do elemento corrente: //paragrafo ƒ Seleção do elemento corrente: .
  • 9. Exercício 1 Usando o documento XML fornecido, crie expressões XPath para as seguintes consultas: 1. Selecionar as instituições dos autores do artigo 2. Selecionar todos os parágrafos das seções do artigo 3. Selecionar nomes dos autores do artigo propriamente dito e das referencias bibliográficas 4. Selecionar pai do elemento endereco 5. Selecionar avô do elemento paragrafo 6. Selecionar todas as ocorrências de endereço
  • 10. Filtros ƒ Usados para remover itens indesejados de uma lista para criar uma nova lista. Ex: 9Seleciona os parágrafos de todos os capítulos, no entanto somente o primeiro parágrafo em cada capítulo. /book/chapter/para[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.
  • 11. Testes de elementos e atributos ƒ Elementos 9O nome de um elemento pode aparecer representando um elemento que deve estar presente como um filho • Selecionar um elemento nota se ele contém diretamente um elemento tituto : /nota[titulo] 9O valor de um elemento pode ser testado: • Selecionar a nota cujo titulo seja "Inicial": /nota[titulo="Inicial"]
  • 12. Testes de elementos e atributos ƒ Atributos 9podem ser selecionados dependendo do valor ou da existência ou não de um atributo 9O 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']
  • 13. AND e OR ƒ Como os filtros são expressões booleanas, pode-se usar AND e OR ƒ Exemplo: //note[titulo=“A” and ano=2000] Atenção: o XML Exchanger Lite só aceita and e or minúsculos
  • 14. Exercício 2 1. Selecionar o autor cujo nome é Maria Ana 2. Selecionar a obra da bibliografia cujo ano é 1999 e o local é University of Pennsylvania 3. Selecionar a seção cujo número é s2 e que contém um parágrafo cujo conteúdo é ... 4. Selecionar o atributo título das seções
  • 15. Testes de posição ƒ Função position() retorna a localização sequencial do elemento testado 9Selecionar somente o primeiro parágrafo dentre os já selecionados pelo padrão /paragrafo[position()=1] ou /paragrafo[1]
  • 16. Testes de posição ƒ Função last() localiza o último elemento (retorna o número da posição do último elemento) 9 Selecionar o último parágrafo //paragrafo[last()] ƒ Função count() retorna o número de ocorrências de um elemento 9 Selecionar seções que contenham apenas dois parágrafos //secao[count(paragrafo)=2]
  • 17. Função NOT ƒ Função not() para reverter o resultado do teste 9Selecionar todas as notas, exceto a terceira //nota[not(position()=3)] 9Selecionar uma nota que não contém um elemento título //nota[not(titulo)] 9Selecionar todos os capítulos, exceto aquele que tenha o atributo número com valor 10 //capitulo[not(@numero='10’)]
  • 18. Comparações ƒ Selecionar todos paragrafos, 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]
  • 19. Tratamento de Strings ƒ Função contains(par1, par2) retorna true se par1 contém o texto em par2 par1 pode ser text() ou .
  • 20. Função contains() ƒ Usando "text()", testa somente o texto do elemento 9Selecionar titulo que contenha a palavra "relacional" //titulo[contains(text(), "relacional")] <titulo>Modelo relacional</titulo>
  • 21. Tratamento de Strings ƒ Usando ".", testa o elemento secao e seus subelementos 9 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>
  • 22. Tratamento de Strings ƒ Função starts-with() testa o texto no começo da string. Não pode haver espaço em branco. 9 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!
  • 23. Tratamento de Strings ƒ Função string() converte o valor do argumento para string 9 Exemplo: string(//capitulo[1]/@numero), retorna o valor do atributo numero do primeiro capitulo, em formato string ƒ Função normalize-space() 9 No meio da string, reduz vários espaços em branco para um único caractere espaço 9 Remove completamente os espaços do início e fim da string //titulo[contains(normalize-space(.), "Introdução a JSP")] <titulo> Introdução a JSP </titulo>
  • 24. Tratamento de Strings ƒ Função concat() concatena strings. Pode ter um ou mais parâmetros: concat(text1, texto2,..., texton) 9 Retornar a seção que fale da autora do livro //secao[contains(.,concat (./../autor/nome/text(), “ ”, ../autor/sobrenome/text()))] <livro> <autor> <nome>Ana</nome> <sobrenome>Silva</sobrenome> </autor> <secao> A autora Ana Silva ...</secao> <secao> ... </secao> </livro>
  • 25. Tratamento de Strings ƒ Função translate() converte caracteres de acordo com um esquema de mapeamento. 9 Uso: comparações case-insensitive 9 Parâmetros: string para converter, caracteres para modificar no texto fonte, e valores a serem colocados //paragrafo[contains(translate(normalize-space(.), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "ELEMENTO")] O que está em minúsculo é trocado pelo maiúsculo. O que está em maiúsculo é comparado normalmente <paragrafo>EM XML, UM ELEMENTO É ...</paragrafo> <paragrafo>Um documento XML deve possuir um elemento raiz ...</paragrafo> 9 os dois elementos paragrafo são recuperados
  • 26. 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 9 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>
  • 27. Tratamento de Strings ƒ Função substring-after() extrai texto do final da string 9 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 9 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>
  • 28. Tratamento de Números ƒ Função number() converte o valor do argumento para números. 9 Expressões booleanas são interpretadas como: • 1 para true • 0 para false
  • 29. Tratamento de Números ƒ Operadores + e - podem ser usados: 9 //nota[3] é equivalente a /nota[1 + 2] ƒ Função mod() 9 Fornece o resto de uma divisão truncada 9 Selecionar parágrafos pares: //paragrafo[position() mod 2 = 0]
  • 30. Filtros Múltiplos ƒ Usados para combinar um teste de posição e um outro tipo de teste 9 Selecionar nomes de companhias, e então extrair o terceiro nome da lista //nome[companhia][3] <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>...</pessoa></nome> </nomes> <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>... </pessoa></nome> </nomes>
  • 31. Filtros Múltiplos ƒ Usados para combinar um teste de posição e um outro tipo de teste 9 Selecionar o terceiro nome, fornecendo o nome da companhia (só seleciona se for uma companhia!) //nome[3][companhia] <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>...</pessoa></nome> </nomes> <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>... </pessoa></nome> </nomes>
  • 32. Testes de boleanos ƒ Função boolean() avalia uma expressão e retorna um valor boleano. Se o argumento for: 9 Número: Retorna TRUE se for diferente de zero boolean(3) --> TRUE boolean(0) --> FALSE 9 Conjunto de nodos: Retorna TRUE se houver ao menos um nodo boolean(title) --> TRUE boolean() --> FALSE 9 String: Retorna TRUE se o tamanho da string for maior que zero boolean("algum texto") --> TRUE boolean("") --> FALSE
  • 33. Outras funções ƒ Comentários: 9 Selecione comentários que estejam dentro de livro //livro/comment() ƒ Instruções de processamento 9 Encontre instruções de processamento que estejam dentro do elemento livro //livro/processing-instruction()
  • 34. Exercício 3 ƒ Usando o mesmo documento XML, crie expressões XPath 1. Retorne todas as seções do artigo que possuem pelo menos um subelemento figura (use a função boolean) 2. Selecione as seções ímpares 3. Selecione as seções ímpares que possuem pelo menos um subelemento figura 4. Selecione os parágrafos que contêm uma instrução de processamento 5. Encontre autores que possuam "Ana" no nome. Não devem estar nas referencias bibliográficas. 6. A versão do artigo 7. Selecione o parágrafo que tenha ambos os atributos "numero" e "tipo" 8. Nome do(s) autor(res) da bibliografia cujo titulo da obra é "Union Types for Semistructured Data ". 9. Selecione o ano da publicação de bibliografias, cujo nome do autor contenha a palavra "Abiteboul"
  • 35. Exercício 3 10. Um parágrafo cujo tamanho da string que ele contém é 27 11. Selecione o terceiro parágrafo de uma seção 12. Selecione um parágrafo que contenha o nome do segundo autor do artigo e sua instituição. Entre estes dois dados existe a string "from“ 13. Selecione todo e qualquer parágrafo que tenha a string "two years". Trate o uso de maiúsculas e minúsculas!! 14. Selecionar seções que contenham somente dois parágrafos 15. Selecione os elementos "ano" descendentes de bibliografia 16. Encontre a instrução de processamento de algum elemento paragrafo.
  • 36. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C 9 Funções para nodos (elementos) Nome Sintaxe Descrição count() count(node-set) = number Retorna o número de nodos de um node-set id() id(value) = node-set Seleciona elementos pelo seu ID único last() last() = number Retorna o número da posição do ultimo nodo em uma lista de nodos processados local-name() local-name(node)= string Retorna a parte local de um nodo. Um nodo geralmente consiste de um prefixo, uma vírgula e seguida de um nome local name() name(node) = string Retorna o nome de um nodo namespace-uri() namespace-uri(node) = uri Retorna a URI da namespace de um nodo específico position() position() = number Retorna a posição em uma lista de nodos do nodo que está sendo processado
  • 37. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C 9 Funções para string Nome Sintaxe e Exemplo Descrição concat() string=concat(val1, val2, ..) Retorna a concatenação de todos Exemplo: os seus argumentos concat('The',' ','XML') Resultado: 'The XML' contains() bool=contains(val,substr) Retorna true se a segunda string Exemplo: está contida na primeira contains('XML','X') Resultado: true normalize- string=normalize- Normaliza os espaços em space() space(string) broncos para um só Exemplo: normalize-space(' The XML ') Resultado: 'The XML' starts-with() bool=starts- Retorna true se a primeira string with(string,substr) inicia com a segunda Exemplo: starts-with('XML','X') Resultado: true string() string(value) Converte o valor do argumento Exemplo: para string string(314) Resultado: '314'
  • 38. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C 9 Funções para string Nome Sintaxe e Exemplo Descrição string- number=string-length(string) Retorna o número de length() Exemplo: caracteres em uma string string-length('Beatles') Resultado: 7 substring() string=substring(string,start,length) Retorna a parted a string Exemplo: indicada nos argumentos substring('Beatles',1,4) Resultado: 'Beat' substring- string=substring-after(string,substr) Retorna a parte da string after() Exemplo: que está depois do substring-after('12/10','/') argumento substr Resultado: '10' substring- string=substring-before(string,substr) Retorna a parted a string before() Exemplo: que está antes do substring-before('12/10','/') argumento substr Resultado: '12' translate() string=translate(value,string1,string2) Executa reposição Exemplo: character a character. translate('12:30','30','45') Resultado: '12:45' translate('12:30','03','54') Resultado: '12:45' translate('12:30','0123','abcd') Resultado: 'bc:da'
  • 39. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C 9 Funções para numéricos Nome Sintaxe e Exemplo Descrição ceiling() ceiling(number) = number Retorna o menor inteiro que não pe Exemplo: menor do que o argumento ceiling(3.14) Resultado: 4 floor() floor(number) = number Retorna o maior inteiro que não é maior Exemplo: do que o argumento floor(3.14) Resultado: 3 number() number(value) = number Converte o valor do argumento para um Exemplo: numérico number('100') Resultado: 100 round() round(number)= integer Arredonda o argumento ao inteiro mais Exemplo: próximo round(3.14) Resultado: 3 sum() sum(nodeset)=number Retorna o valor total de um conjunto Exemplo: numérico de valores em um node-set sum(/cd/price)
  • 40. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C 9 Funções booleanas Nome Sintaxe e Exemplo Descrição boolean() bool=boolean(value) Converte o argumento e retorna true ou false false() false() Retorna false Exemplo: number(false()) Resultado: 0 lang() bool=lang(language) Retorna true se a linguagem do argumento casa com a linguagem do elemento xsl:lang not() bool=not(condition) Retorna true se a condição de argumento for falsa, e falsa se a Exemplo: condição for verdadeira not(false()) true() true() Retorna true Exemplo: number(true()) Resultado: 1
  • 41. Xpath e Java ƒ Java tem um pacote para lidar com expressões XPath 9 javax.xml.xpath 9 Documentação: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/pa ckage-summary.html