Você está na página 1de 5

Tutorial XPath

XPath um conjunto de regras de sintaxe para definir partes de um documento XML. XPath o elemento principal no padro W3C XSLT. Sem o conhecimento de XPath voc no ser capaz de criar documentos XSLT.

Introduo ao XPath
XPath um conjunto de regras de sintaxe para definir partes de um documento XML. O que XPath? XPath uma sintaxe para definir partes de um doc umento XML XPath usa c aminhos para definir elementos XML XPath define uma biblioteca de funes padro XPath o elemento princ ipal em XSLT XPath no esc rito em XML XPath um padro W3C Como caminhos de arquivos tradicionais XPath usa expresses de c aminho para identificar ns em um documento XML. Essas expresses de caminho se parecem muito com as expresses que voc v quando voc trabalha num sistema de arquivos de um computador: w3schools/xpath/default.asp Exemplo de XPath Veja esse documento XML simples:

<?xml version="1.0" encoding="ISO-8859-1"?> <catalog>


A expresso XPath abaixo seleciona o elemento RAIZ catalog:

<cd country="USA">

<title>Empire Burlesque</title>

<art

/catalog /catalog/cd /catalog/cd/price

A expresso XPath abaixo seleciona todos os elementos cd do elemento catalog:

A expresso XPath abaixo seleciona todos os elementos price de todos os elementos cd do elemento catalog:

Nota: Se o caminho comea com uma barra ( / ) ele representa um caminho absoluto para um elemento! XPath define uma biblioteca de funes padro XPath define uma biblioteca de funes padro para trabalhar c om strings, nmeros e expresses booleanas. A expresso XPath abaixo seleciona todos os elementos cd que tem um elemento price que tem um valor maior que 10.80:

/catalog/cd[price>10.80] XPath usado em XSLT


XPath o elemento principal do padro XSLT. Sem o conhecimento de XPath voc no ser c apaz de criar documentos XSLT. Voc pode ler mais sobre XSLT no nosso tutorial XSLT em ingls ou em portugus.

XPath um padro W3C


XPath foi liberado com uma rec omenda o W3C em 16 de novembro de 1999 como uma linguagem para enderear partes de um documento XML. XPath foi desenvolvido para ser usado por XSLT, XPointer e outros softwares XML parsing. Voc pode ler mais sobre padres XML e XSl em nosso tutorial W3C

Sintaxe XPath
XPath usa expresses de caminho para localizar ns dentro de documentos XML. Documento XML de Exemplo Ns usaremos esse doc umento XML simples para descrever a sintaxe XPath:

<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> Localizando Ns

<cd country="USA">

<title>Empire Burlesque</title>

<art

Doc umentos XML podem ser representados como rvores de ns (muito similar viso em rvore das pastas do seu c omputador). XPath usa uma expresso padro para identificar ns em um doc umento XML. Um padro XPath uma lista nomes de elementos filhos separada por barras que desc reve o caminho atravs do doc umento XML. O padro "seleciona" elementos que combinam com o c aminho. A expresso XPath a seguir seleciona todos os elementos preo de todos os elementos cd do elemento catalog: Nota: Se o caminho comea com uma barra ( / ) ele representa um caminho absoluto para um elemento! Nota: Se o caminho comea com duas barras ( // ) ento todos os elementos no documento que se encaixam no critrio sero selecionados (mesmo que eles estejam em nveis diferentes da rvore XML)! A expresso XPath a seguir seleciona todos os elementos c d no documento:

/catalog/cd/price

//cd

Selecionando elementos desconhecidos

Curingas ( * ) podem ser usados para selec ionar elementos XML desconhec idos. A expresso XPath a seguir seleciona todos os elementos filhos de todos os elementos cd do elemento catalog: A expresso XPath a seguir seleciona todos os elementos price que so elementos netos do elemento catalog: A expresso XPath a seguir seleciona todos os elementos price que tm dois anc estrais: A expresso XPath a seguir seleciona todos os elementos no documento:

/catalog/cd/* /catalog/*/price

/*/*/price

//*

Selecionando Sees
Usando-se c olc hetes numa expresso XPath voc pode especific ar um elemento adiante. A expresso XPath a seguir seleciona o primeiro elemento cd filho do elemento catalog:

/catalog/cd[1] /catalog/cd[last()]

A expresso XPath a seguir seleciona o ltimo elemento cd filho do elemento catalog (Nota: no existe a funo first()): A expresso XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price:

/catalog/cd[price]

A expresso XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price com valor de 10.90: /catalog/cd[price=10.90] A expresso XPath a seguir seleciona todos os elementos price de todos os elementos cd do elemento catalog que tem um elemento price c om valor de 10.90: /catalog/cd[price=10.90]/price

Selecionando vrios caminhos


Usando o operador "|" numa expresso XPath voc pode selecionar vrios caminhos. A expresso XPath a seguir seleciona todos os elementos title e artist do elemento cd do elemento catalog:

/catalog/cd/title

| /catalog/cd/artist
A expresso XPath a seguir seleciona todos os elementos title e artist do documento:

//title | //artist //title | //artist | //price

A expresso XPath a seguir seleciona todos os elementos title, artist e price do documento:

A expresso XPath a seguir seleciona todos os elementos title do elemento cd do elemento catalog, e todos os elementos artist no documento: /catalog/cd/title | //artist Em XPath todos os atributos so especificados pelo prefixo "@". Esta expresso XPath selec iona todos os atributos chamados country:

//@country //cd[@country]

Esta expresso XPath selec iona todos os elementos cd que tem um atributo chamado country : Esta expresso XPath selec iona todos os elementos cd que tem algum atributo:

//cd[@*] //cd[@country='UK']

Esta expresso XPath selec iona todos os elementos cd que tem um atributo chamado c ountry com valor 'UK':

XPath Location Paths (Caminho Locais XPath)


Uma expresso de caminho local (location path) resulta em um conjunto de ns. Expresso de Caminho Local Um caminho local pode ser absoluto ou relativo. Um caminho local absoluto comea com uma barra ( / ) e um c aminho local relativo no. Em ambos os casos o c aminho loc al c onsiste de um ou mais nveis de loc alizao, c ada um separado por uma barra: Um caminho local absoluto: Um caminho local relativo:

/step/step/... step/step

Os nveis de localizao so avaliados em ordem um de c ada vez, da esquerda pra direita. Cada nvel avaliado segundo os ns no conjunto de ns atual. Se o caminho local absoluto, o c onjunto de ns atual o n raiz. Se o caminho loc al relativo, o conjunto de ns atual consiste do n onde a expresso est sendo usada. Nveis de localiza o c onsistem de: um eixo (especific a a relao de rvore entre os ns selecionados pelo nvel de localizao e o n atual) um n teste (especific a o tipo de n e o nome expandido dos ns selecionados pelo nvel de loc alizao) zero ou mais predicados (usa expresses para refinar mais o conjunto de ns selecionado pelo nvel de localiza o) A sintaxe para um nvel de localiza o : Exemplo:

nomeeixo::noteste[predicado]

child::price[price=9.90]

Eixos e Ns de Teste
Um eixo define um conjunto de ns relativo ao n atual. Um n de teste usado para identificar um n dentro de um eixo. Ns podemos executar um n de teste por nome ou por tipo. Nome do Eixo Descrio anc estor Contm todos os anc estrais (pais, avs, etc) do n atual. Nota: Este eixo incluir sempre o n raiz, a menos que o n atual seja o n raiz anc estor-or-self Contm o n atual mais todos os seus anc estrais (pai, av, etc ) attribute Contm todos os atributos do n atual child Contm todos os filhos do n atual descendant Contm todos os descendentes (filhos, netos, etc ) do n atual. Nota: Este eixo nunca c ontm atributos ou ns namespace descendant-or-self Contm o n atual mais todos os seus descendentes (filhos, netos, etc ) following Contm tudo no doc umento depois da tag de fechamento do n atual following-sibling Contm todos os irmos depois do n atual. Nota: Se o n atual um n atributo ou um n namespace, este eixo estar vazio

namespace parent prec eding prec eding-sibling self Exemplos

Contm todos os ns namespac e do n atual Contm o pai do n atual Contm tudo no doc umento que est antes da tag de abertura do n atual Contm todos os irmos antes do n atual. Nota: Se o n atual um n atributo ou um n namespace, este eixo estar vazio Contm o n atual

Exemplo child::cd Seleciona attribute::src Seleciona child::* Seleciona attribute::* Seleciona child::text() Seleciona child::node() Seleciona desc endant::cd Seleciona anc estor::cd Seleciona anc estor-or-self::cdSeleciona child::*/c hild::pric e Seleciona / Seleciona Predicados

Resultado todos os elementos c d que so filhos do n atual (se o n atual no tem cds filhos, ser selecionado um conjunto vazio de ns) o atributo src do n atual (se o n atual no tem atributo src, ser selecionado um conjunto vazio de ns) todos os elementos filhos do n atual todos os atributos do n atual o n texto filho do n atual todos os filhos do n atual todos os elementos c d descendentes do n atual todos os cds ancestrais do n atual todos os cds ancestrais do n atual e, se o n atual um elemento cd, seleciona o n atual tambm todos os preos netos do n atual a raiz do documento

Um predicado filtra um c onjunto de ns em um novo conjunto de ns. Um predicado fic a dentro de colchetes ( [] ). Exemplos Exemplo child::pric e[price=9.90] Selec iona child::cd[position()=1] Selec iona child::cd[position()=last()] Selec iona child::cd[position()=last()-1] Selec iona child::cd[position()<6] Selec iona /descendant::cd[position()=7] Selec iona child::cd[attribute::type="classic"]Selec iona Sintaxe Abreviada dos Caminhos Locais Abreviaes podem ser usadas para descrever um caminho local. A abreviao mais importante que child:: pode ser omitido de um nvel de localiza o. Abrev. Significado Exemplo nada child:: c d o mesmo que child::cd @ attribute:: c d[@type="classic"] o mesmo que child::cd[attribute::type="c lassic "] . self::node() .//c d o mesmo que self::node()/desc endant-or-self::node()/c hild::cd .. parent::node() ../cd o mesmo que parent::node()/c hild::cd //// /descendant-or-self::node()///c d o mesmo que /descendant-or-self::node()/c hild::c d Exemplos Exemplo cd * text() @src @* cd[1] cd[last()] */cd /book/chapter[3]/para[1] Resultado Selec iona todos os elementos cd que so filhos do n atual Selec iona todos os elementos filhos do n atual Selec iona todos os ns textos filhos do n atual Selec iona o atributo src do n atual Selec iona todos os atributos do n atual Selec iona o primeiro cd filho do n atual Selec iona o ltimo cd filho do n atual Selec iona todos os cds netos do n atual Selec iona o primeiro pargrafo do terc eiro captulo do livro Selec iona todos os elementos cds descendentes da raiz do documento e assim seleciona //cd todos os elementos c ds no mesmo documento c omo o n atual . Selec iona o n atual .//c d Selec iona os elementos cds desc endentes do n atual .. Selec iona o pai do n atual ../@src Selec iona o atributo src do pai do n atual cd[@type="classic "] Selec iona todos os cds filhos do n atual que tm o atributo "type" c om o valor "c lassic " cd[@type="classic "][5] Selec iona o quinto cd filho do n atual que tem o atributo "type" c om o valor "c lassic " cd[5][@type="c lassic"] Selec iona o quinto cd filho do n atual se esse filho tem o atributo "type" c om valor "classic" cd[@type and @country ]Selec iona todos os cds filhos do n atual que tm ambos os atributos "type" e "country" Expresses XPath XPath suporta expresses numricas, de igualdade, relacionais e booleanas. Expresses Numricas Expresses numricas so usadas para realizar opera es aritmticas em nmeros. Operador Descrio Exemplo Resultado + Adio 6 +4 10 Subtra o 6- 4 2 * Multiplic ao 6* 4 24 div Diviso 8 div 4 2 mod Mdulo (resto da diviso) 5 mod 2 1 Nota: XPath sempre c onverte c ada operando em um nmero antes de realizar um expresso aritmtic a. Expresses de Igualdade Resultado todos os elementos price que so filhos do n atual c om um pre o igual a 9.90 o primeiro cd filho do n atual o ltimo cd filho do n atual o penltimo cd filho do n atual os primeiros c inc o cds filhos do n atual o stimo elemento cd no doc umento todos os cds filhos do n atual que tm um atributo tipo com o valor "classic"

Expresses de igualdade so usadas para testar a igualdade entre dois valores. Operador Descrio Exemplo Resultado = Igual price=9.80 true (se o preo igual a 9.80) != Diferente price!=9.80 false Testando um conjunto de ns Se testada a igualdade do valor de teste em relao a um c onjunto de ns, o resultado verdadeiro se o c onjunto de ns c ontm algum n c om um valor igual ao valor de teste. Se testada a desigualdade do valor de teste em relao a um c onjunto de ns, o resultado verdadeiro se o conjunto de ns c ontm algum n c om um valor diferente ao valor de teste. O resultado que o conjunto de ns pode ser igual e diferente ao mesmo tempo!!! Expresses Relacionais Expresses relacionais so usadas para comparar dois valores. Operador Descrio Exemplo Resultado < Menor price<9.80 false (se o preo 9.80) <= Menor ou igualprice<=9.80 true > Maior price>9.80 false >= Maior ou igual price>=9.80 true Nota: XPath sempre c onverte c ada operando em um nmero antes de fazer a avaliao. Expresses Booleanas Expresses booleanas so usadas para comparar dois valores. OperadorDescrio Exemplo Resultado or Ou pric e=9.80 or pric e=9.70 true (se o preo 9.80) and E pric e<=9.80 and price=9.70false Funes XPath XPath contm uma biblioteca de funes para converso de dados. Biblioteca de Funes XPath A biblioteca de funes XPath c ontm um c onjunto de fun es centrais para c onverso e traduo de dados. Funes para Conjunto de Ns Nome count() Retorna o id() Seleciona last() Retorna o loc al-name() Retorna a name() Retorna o namespac e-uri()Retorna o position() Retorna a Funes de Strings Nome concat() contains() Descrio Retorna a concatenao de todos os argumentos Sintaxe string=c onc at(val1,val2,...) bool=contains(val,substr) string=normalize-space(string) bool=starts-with(string,substr) string(value) number=string-length(string) string=substring(string,start,length) string=substring-after(string,substr) string=substring-before(string,substr) Exemplo concat('The',' ','XML') -> Resultado: 'The XML' contains('XML','X') -> Restultado: true normalize-spac e(' The XML ') -> Resultado: 'The XML' starts-with('XML','X') -> Resultado: true string(314) -> Resultado: '314' string-length('Beatles') -> Resultado: 7 substring('Beatles',1,4) -> Resultado: 'Beat' substring-after('12/10','/') -> Resultado: '10' Descrio Sintaxe nmero de ns num conjunto de ns number=count(node-set) elementos pelo seu ID nico node-set=id(value) nmero da posi o do ltimo n na lista de ns processados number=last() parte local de um n. Um n normalmente consiste de um prefixo, os dois pontos, seguidos pelo nome localstring=local-name(node) nome do n string=name(node) namespace URI de um n especfico uri=namespace-url(node) posio na lista de ns do n que est sendo processado atualmente number=position()

Retorna verdadeiro se a segunda string est contida dentro da primeira string, seno retorna falso Remove espaos antes e depois de uma string e substitui todas normalizeas seqnc ias internas de espa os por um nico espao em spac e() branco startsRetorna verdadeiro se a primeira string come a com a segunda with() string, seno retorna falso string() Converte o argumento em string stringRetorna o nmero de c arac teres de uma string length() substring()Retorna um pedao da string substring- Retorna a parte da string que aparece depois do argumento substr after() substring- Retorna a parte da string que aparece antes do argumento before() substr

substring-before('12/10','/') -> Resultado: '12' translate('12:30','30','45') -------> Resultado: '12:45' ----------------Realiza uma substituio c arac ter por c arac ter. Ela proc ura no translate('12:30','03','54') -------> translate() argumento 'value' os caracteres contidos na 'string1' e substitui string=translate(value,string1,string2) Resultado: '12:45' ----------------cada c arac tere pelo carac tere da mesma posio na 'string2' translate('12:30','0123','abcd') -------> Resultado: 'bc :da' Funes Numricas Nome Descrio ceiling() Retorna o menor inteiro que no menor que o argumento (funo teto) floor() Retorna o maior inteiro que no maior que o argumento (funo cho) number()Converte o argumento em um nmero round() Arredonda o argumento para o inteiro mais prximo Sintaxe Exemplo number=ceiling(number)c eiling=(3.14) -> Resultado: 4 number=floor(number) floor(3.14) -> Resultado: 3 number=number(value) number('100') -> Resultado: 100 integer=round(number) round(3.14) -> Resultado: 3

sum()

Retorna o valor total de um conjunto de valores numric os num conjunto de nsnumber=sum(nodeset) sum(/cd/price)

Funes Booleanas Nome Descrio boolean()Converte o argumento 'value' em Booleano e retorna verdadeiro ou falso false() lang() not() true() Retorna falso Sintaxe bool=boolean(value) false() Exemplo: number(false()) -> Resultado: 0

Retorna verdadeiro se o argumento 'language' igual ao idioma do elemento xsl:lang, seno retorna bool=lang(language) falso Retorna verdadeiro se o argumento 'condition' falso, e falso se o argumento verdadeiro bool=not(condition) Exemplo: not(false()) true() Exemplo: number(true()) -> Resultado: Retorna verdadeiro 1

Exemplos XPath Ns iremos usar o catlogo de CDs do nosso tutorial de XML para demonstrar alguns exemplos XPath. O catlogo de CDs Se voc estudou o nosso tutorial de XML voc lembrar de documento XML: (Uma frao do catalogo)

<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> Selecionando Ns

<cd>

<title>Empire Burlesque</title>

<artist>Bob Dylan<

Ns demonstraremos como selecionar ns de um documento XML usando a fun o selectNodes no Internet Explorer. Esta funo tem uma expresso de c aminho loc al c omo argumento:

xmlobject.selectNodes(Xpath expression)
Selecionando

Ns cd xmlDoc.selectNodes("/catalog/cd[0]")

O exemplo a seguir seleciona somente o primeiro n do c atlogo de c ds: Se voc tem o IE 5 ou superior voc pode fazer mais testes.

Nota: IE 5 implementou que [0] deveria ser o primeiro n, mas de acordo com o padro W3C, deve ser [1].

Selecionando Ns price
O exemplo a seguir seleciona todos os ns price do catlogo de c ds: Se voc tem o IE 5 ou superior voc pode fazer mais testes.

xmlDoc.selectNodes("/catalog/cd/price")

Selecionando o texto dos Ns price


O exemplo a seguir seleciona apenas o texto dos ns price: Se voc tem o IE 5 ou superior voc pode fazer mais testes.

xmlDoc.selectNodes("/catalog/cd/price/text()")

Selecionando Ns cd com price>10.80


O exemplo a seguir seleciona todos os ns c d com price>10.80: Se voc tem o IE 5 ou superior voc pode fazer mais testes.

xmlDoc.selectNodes("/catalog/cd[price>10.80]")

Selecionando Ns price com price>10.80


O exemplo a seguir seleciona todos os ns price c om price>10.80:

xmlDoc.selectNodes("/catalog/cd[price>10.80]/price")