PHP + XML

William Prigol Lopes

SOLIS – Cooperativa de Soluções Livres

PHP+XML

William Prigol Lopes

1

Introdução

O que é PHP? O que é XML? PHP + XML SAX
– –

Utilizando o SAX Exercícios Utilizando o DOM Exercícios
William Prigol Lopes 2

DOM
– –

PHP+XML

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

PHP+XML

William Prigol Lopes

3

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).

PHP+XML

William Prigol Lopes

4

PHP + XML

SAX (Simple API for XML)

Criação de parsers XML e manipulação de eventos XML Permite que programas acessem e alterem dinamicamente um documento

DOM (Document Object Model)

PHP+XML

William Prigol Lopes

5

Arquivo XML

Criando um 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> PHP+XML William Prigol Lopes 6

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);

PHP+XML

William Prigol Lopes

7

xml_set_element_handler
xml_set_element_handler(parser, taginicial, tagfinal)

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

PHP+XML

William Prigol Lopes

8

xml_set_character_data_handler
xml_set_character_data_handler($xml_parser, tratacaracteres)

function tratacaracteres($parser, $dados)

PHP+XML

William Prigol Lopes

9

“taginicial”

Função “taginicial”

<?php function taginicial($parser, $elemento, $attrs) { if ($elemento == “cinema”) echo “<table>”; else if ($elemento == “filme”) echo “<tr><td><ul>”; else echo “<li>”; } ?>

PHP+XML

William Prigol Lopes

10

“tagfinal”

Função “tagfinal”

<?php function tagfinal($parser, $elemento) { if ($elemento == “cinema”) echo “</table>”; else if ($elemento == “filme”) echo “</ul></td></tr>”; else echo “</li>”; } ?>

PHP+XML

William Prigol Lopes

11

“tratacaracteres” e xml_parser_free

Função “tratacaracteres”

<?php function tratacaracteres($parser, $dados) { echo “<i>”.$dados.”</i>”; } ?>

PHP+XML

William Prigol Lopes

12

Exercício

Telefones

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

<lista> <telefone> <numero></numero> <nome></nome> <grupo></grupo> </telefone> </lista>
PHP+XML William Prigol Lopes 13

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]; }
PHP+XML

?>

William Prigol Lopes

14

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); ?>

PHP+XML

William Prigol Lopes

15

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); ?>

PHP+XML

William Prigol Lopes

16

xml_parse_into_struct

Array de valores criado pela função

Array{ [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 } }

PHP+XML

William Prigol Lopes

17

Exercício

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

PHP+XML

William Prigol Lopes

18

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 Obtém um código de erro do analisador XML
William Prigol Lopes 19

xml_get_error_code(object xml_parser)

PHP+XML

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

PHP+XML

William Prigol Lopes

20

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
William Prigol Lopes

PHP+XML

21

Carregando o XML

domxml_open_mem(string dados)

Cria um parser xml através de dados passados por parâmetro Cria um parser xml através de dados passados por parâmetro com toda a árvore de diretórios Cria um parser xml através de dados obtidos por um arquivo
William Prigol Lopes 22

domxml_xmltree(string dados)

domxml_open_file(string file)

PHP+XML

Dominando o DOM

$dom_object->document_element()

Obtém todos dados de um objeto dom Cria um novo atributo no documento Cria um novo elemento no documento Cria um novo texto no documento

$dom_object->createAttribute()

$dom_object->createElement()

$dom_obect->createText()

PHP+XML

William Prigol Lopes

23

Dominando o DOM

$dom_object->appendChild(DomNode)

Atribui um elemento previamente criado Remove um elemento atribuido
Substitui um elemento atribuido

$dom_object->removeChild(DomNode)

$dom_object->replaceChild(DomNode)

PHP+XML

William Prigol Lopes

24

Dominando o DOM

$dom_object->save(filename)

Salva a árvore XML em um arquivo Carrega a arvore XML de um arquivo

$dom_object->open(filename)

PHP+XML

William Prigol Lopes

25

Exemplo
<?php $doc = new DOMDocument('1.0'); // Gera um novo documento $root = $doc->createElement('book'); $root = $doc->appendChild($root); $title = $doc->createElement('title'); $title = $root->appendChild($title); // // // // Gera um Adiciona Gera um Adiciona elemento “livro” como objeto filho elemento “título” o titulo

$text = $doc->createTextNode('This is the title'); $text = $title->appendChild($text);// Adiciona o texto como nodo do titulo echo 'Escrito: ' . $doc->save("/tmp/test.xml") . ' bytes'; // Salvar como // XML ?>

PHP+XML

William Prigol Lopes

26

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

PHP+XML

William Prigol Lopes

27

Links

W3C XML Course:

http://www.w3schools.com/xml/xml_whatis.asp http://www.php.net http://www.php.net/xml http://expat.sourceforge.net
William Prigol Lopes 28

PHP:

PHP + XML

Expat

PHP+XML