Upload
ernesto-pereira
View
2.113
Download
4
Embed Size (px)
DESCRIPTION
Apostila
Citation preview
PHP+XML William Prigol Lopes 1
PHP + XML
William Prigol Lopes
SOLIS – Cooperativa de Soluções Livres
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
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
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).
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
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
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);
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)
PHP+XML William Prigol Lopes 9
xml_set_character_data_handler
xml_set_character_data_handler($xml_parser, tratacaracteres)
function tratacaracteres($parser, $dados)
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>”;}
?>
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>”;}
?>
PHP+XML William Prigol Lopes 12
“tratacaracteres” e xml_parser_free
● Função “tratacaracteres”
<?phpfunction tratacaracteres($parser, $dados){
echo “<i>”.$dados.”</i>”;}
?>
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>
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];}
?>
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);
?>
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);
?>
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}
}
PHP+XML William Prigol Lopes 18
Exercício
● Aplicar a função xml_parse_into_struct no exercício anterior
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
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
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
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
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
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
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
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
?>
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
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