28
PHP+XML William Prigol Lopes 1 PHP + XML William Prigol Lopes SOLIS – Cooperativa de Soluções Livres

PHP + XML

Embed Size (px)

DESCRIPTION

Apostila

Citation preview

Page 1: PHP + XML

PHP+XML William Prigol Lopes 1

PHP + XML

William Prigol Lopes

SOLIS – Cooperativa de Soluções Livres

Page 2: PHP + XML

PHP+XML William Prigol Lopes 2

Introdução

● O que é PHP?

● O que é XML?

● PHP + XML

● SAX

– Utilizando o SAX

– Exercícios

● DOM

– Utilizando o DOM

– Exercícios

Page 3: PHP + XML

PHP+XML William Prigol Lopes 3

O que é PHP?

● Acrônimo de PHP: Hipertext Language PostProcessor

● Inicialmente escrita para o desenvolvimento de aplicações Web

● Facilidade para iniciantes e recursos poderosos para programadores profissionais

● Utilizado para vários recursos, desde scripts a aplicações desktop

Page 4: PHP + XML

PHP+XML William Prigol Lopes 4

O que é XML?

● eXtensible Markup Language

● Formato de dados para intercâmbio de documentos na Web.

● Padrão definido pela W3C.

● Descreve o conteúdo de um documento sem importância de como ele deverá ser exibido (linguagem de marcação).

Page 5: PHP + XML

PHP+XML William Prigol Lopes 5

PHP + XML

● SAX (Simple API for XML)

– Criação de parsers XML e manipulação de eventos XML

● DOM (Document Object Model)

– Permite que programas acessem e alterem dinamicamente um documento

Page 6: PHP + XML

PHP+XML William Prigol Lopes 6

Arquivo XML

<xml version=”1.0”?><cinema>

<filme><nome>Star Wars III</nome><diretor>George Lucas</diretor><tipo>Ficção científica</tipo><ano>2005</ano>

</filme><filme>

<nome>AI – Inteligência Artificial</nome><diretor>Steven Spielberg</diretor><tipo>Ficção científica</tipo><ano>2003</ano>

</filme></cinema>

</xml>

● Criando um arquivo XML

Page 7: PHP + XML

PHP+XML William Prigol Lopes 7

SAX

● Criando um parser XML:– xml_parser_create(): Cria um parser xml utilizando o SAX

● Funções básicas de manipulação:– xml_set_element_handler(object parser, string taginicial,

string tagfinal):

– xml_set_character_data_handler(object parser, string tratamentodecaracteres);

Page 8: PHP + XML

PHP+XML William Prigol Lopes 8

xml_set_element_handler

xml_set_element_handler(parser, taginicial, tagfinal)

function taginicial($parser, $elemento, $attrs)

function tagfinal($parser, $elemento, $attrs)

Page 9: PHP + XML

PHP+XML William Prigol Lopes 9

xml_set_character_data_handler

xml_set_character_data_handler($xml_parser, tratacaracteres)

function tratacaracteres($parser, $dados)

Page 10: PHP + XML

PHP+XML William Prigol Lopes 10

“taginicial”

● Função “taginicial”

<?phpfunction taginicial($parser, $elemento, $attrs){

if ($elemento == “cinema”)echo “<table>”;

elseif ($elemento == “filme”)

echo “<tr><td><ul>”;else

echo “<li>”;}

?>

Page 11: PHP + XML

PHP+XML William Prigol Lopes 11

“tagfinal”

● Função “tagfinal”

<?phpfunction tagfinal($parser, $elemento){

if ($elemento == “cinema”)echo “</table>”;

elseif ($elemento == “filme”)

echo “</ul></td></tr>”;else

echo “</li>”;}

?>

Page 12: PHP + XML

PHP+XML William Prigol Lopes 12

“tratacaracteres” e xml_parser_free

● Função “tratacaracteres”

<?phpfunction tratacaracteres($parser, $dados){

echo “<i>”.$dados.”</i>”;}

?>

Page 13: PHP + XML

PHP+XML William Prigol Lopes 13

Exercício

● Telefones

– Criar uma lista de telefones em xml com os seguintes itens:

<lista>

<telefone>

<numero></numero><nome></nome><grupo></grupo>

</telefone>

</lista>

Page 14: PHP + XML

PHP+XML William Prigol Lopes 14

Facilitando

● Facilitando as coisas via código<?php

function taginicial($parser, $elemento, $attrs){

$inicial = array('CINEMA' => '<tr><td>', 'FILME' => '<b>');

echo $inicial[$elemento];}

function tagfinal ($parser, $elemento){

$final = array('CINEMA' => '</td></tr>', 'FILME' => '<b>');

echo $final[$elemento];}

?>

Page 15: PHP + XML

PHP+XML William Prigol Lopes 15

xml_parser_free

● Libera o recurso xml.

– xml_parser_free($xml_parser)

<?php$xml_parser = xml_parser_create();// ...xml_parse($xml_parser, $dados);// ...xml_parse_free($xml_parser);

?>

Page 16: PHP + XML

PHP+XML William Prigol Lopes 16

xml_parse_into_struct

● Libera o recurso xml.

– xml_parse_into_struct(int parser, string dados, array &valores, array &indices)

<?php// ...$dados = “<cinema><filme>Curtindo a vida adoidado

</filme></cinema>”;xml_parse_into_struct($parser, $dados, $valores, $indices);

?>

Page 17: PHP + XML

PHP+XML William Prigol Lopes 17

xml_parse_into_struct

● Array de valores criado pela funçãoArray{

[0] => Array {[tag] => cinema[type] => open[level] => 1

}[1] => Array {

[tag] => titulo[type] => complete[level] => 2[value] => 'Curtindo a vida adoidado'

}[2] => Array {

[tag] => cinema[type] => close[level] => 1 }

}

Array{[livro] => Array {

[0] => 0[1] => 2

}[titulo] => Array {

[0] => 1}

}

Page 18: PHP + XML

PHP+XML William Prigol Lopes 18

Exercício

● Aplicar a função xml_parse_into_struct no exercício anterior

Page 19: PHP + XML

PHP+XML William Prigol Lopes 19

Manipulando erros

● xml_get_current_column_number(object xml_parser)

– Obtém o número da coluna atual para um analisador XML

● xml_get_current_line_number(object xml_parser)

– Obtém o número da linha para um analisador XML

● xml_get_error_code(object xml_parser)

– Obtém um código de erro do analisador XML

Page 20: PHP + XML

PHP+XML William Prigol Lopes 20

Manipulando erros

● Sendo um parser o sistema pode também manipular erros:– xml_parse(int parser, string dados, [int final])

– Retorna true se não houver erros, false caso contrário, para cada tipo de erro previsto existe um retorno gerado pelo parser.

● Lista completa www.php.net/xml

Page 21: PHP + XML

PHP+XML William Prigol Lopes 21

DOM

● Document Object Model

● Diferentemente da interpretação do SAX o DOM gera uma estrutura com representação em árvore permitindo que programas e scripts alterem o conteúdo do XML

● --with-dom na instalação do PHP

● Em desempenho o SAX é considerado melhor

● DOM mais acessível pois acessa dinamicamente os dados do XML e acesso a qualquer ponto do nodo facilmente, além da possibilidade de manipular o arquivo XML

Page 22: PHP + XML

PHP+XML William Prigol Lopes 22

Carregando o XML

● domxml_open_mem(string dados)

– Cria um parser xml através de dados passados por parâmetro

● domxml_xmltree(string dados)

– Cria um parser xml através de dados passados por parâmetro com toda a árvore de diretórios

● domxml_open_file(string file)

– Cria um parser xml através de dados obtidos por um arquivo

Page 23: PHP + XML

PHP+XML William Prigol Lopes 23

Dominando o DOM

● $dom_object->document_element()

– Obtém todos dados de um objeto dom● $dom_object->createAttribute()

– Cria um novo atributo no documento● $dom_object->createElement()

– Cria um novo elemento no documento● $dom_obect->createText()

– Cria um novo texto no documento

Page 24: PHP + XML

PHP+XML William Prigol Lopes 24

Dominando o DOM

● $dom_object->appendChild(DomNode)

– Atribui um elemento previamente criado● $dom_object->removeChild(DomNode)

– Remove um elemento atribuido● $dom_object->replaceChild(DomNode)

– Substitui um elemento atribuido

Page 25: PHP + XML

PHP+XML William Prigol Lopes 25

Dominando o DOM

● $dom_object->save(filename)

– Salva a árvore XML em um arquivo● $dom_object->open(filename)

– Carrega a arvore XML de um arquivo

Page 26: PHP + XML

PHP+XML William Prigol Lopes 26

Exemplo

<?php

$doc = new DOMDocument('1.0'); // Gera um novo documento

$root = $doc->createElement('book'); // Gera um elemento “livro”$root = $doc->appendChild($root); // Adiciona como objeto filho$title = $doc->createElement('title'); // Gera um elemento “título”$title = $root->appendChild($title); // Adiciona o titulo

$text = $doc->createTextNode('This is the title');$text = $title->appendChild($text);// Adiciona o texto como nodo do

tituloecho 'Escrito: ' . $doc->save("/tmp/test.xml") . ' bytes'; // Salvar como

// XML

?>

Page 27: PHP + XML

PHP+XML William Prigol Lopes 27

Exercício

● Através da biblioteca DOM:

– Carregar a árvore de dados do primeiro exercício

– Adicionar um numero de telefone

– Repassar um numero

– Salvar o XML

– Executar o parser do primeiro exercício

Page 28: PHP + XML

PHP+XML William Prigol Lopes 28

Links

● W3C XML Course:

– http://www.w3schools.com/xml/xml_whatis.asp● PHP:

– http://www.php.net● PHP + XML

– http://www.php.net/xml● Expat

– http://expat.sourceforge.net