Acho que todos aqui já conhecem o XML, certo? Bom, também acredito que a maioria saiba que o PHP possui várias funções para trabalhar e manipular arquivos XML. Vamos ver algumas das principais neste tutorial:
Vamos usar neste exemplo, o arquivo XML: data.xml
<list>
<languages type="interpreted">
<name>PHP</name>
<name>Python</name>
<name>Ruby</name>
<details>
<name>ASP</name>
<owner>Microsoft</owner>
<effect>SUX!</effect>
</details>
</languages>
<languages type="compiled">
<name>C</name>
<name>Fortan</name>
<name>Pascal</name>
<name>Delphi</name>
</languages>
</list>
Você pode usar outro se quiser. Agora vamos dar uma olhada no arquivo PHP, que irá manipular este documento XML:
<?php
function openingElement ($parser, $element, $attributes) {
echo "<div>";
echo "<$element";
foreach ($attributes as $name => $value) {
echo " $name=\"$value\"";
}
echo ">";
}
function closingElement ($parser, $element) {
echo "</$element></div>";
}
function dataHandler ($parser, $data) {
echo "<i>$data</i>";
}
$parser = xml_parser_create();
xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler ($parser, "openingElement", "closingElement");
xml_set_character_data_handler ($parser, "dataHandler");
$file = file ("data.xml");
foreach ($file as $line) {
xml_parse ($parser, $line);
}
xml_parser_free ($parser);
?>
Veja este exemplo
Grande? Não... Vamos analisar as funções do PHP.
$parser = xml_parser_create(); Linha: 31
Esta função cria um parser (interpretador) para arquivos XML e o armazena na variável $parser.
xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, false); Linha: 32
Esta função apenas desabilita a opção CASE FOLDING. Leia mais...
xml_set_element_handler ($parser, "openingElement", "closingElement"); Linha: 33
Dentro de um arquivo temos elementos (tags). Temos elementos de início e fechamento, igual ao HTML, exemplo: <estados> e </estados>, início e fechamento, respectivamente.
Usando o xml_set_element_handler, definimos quais serão as funções que serão pela manipulação (handling) desses elementos. Se você reparar, mais acima, temos ambas as funções já definidas, openingElement para os elementos de início e, closingElement para os de encerramento.
Para a função de início, o PHP se encarregará de passar 3 argumentos, o parser criado, o nome do elemento e, os atributos do elemento (em forma de matriz - array). Para a função de encerramento, o PHP enviará o parser criado, e o nome do elemento. Lembrando que elementos de encerramento não possuem atributos...
xml_set_character_data_handler ($parser, "dataHandler"); Linha: 34
Muito semelhante, porém o xml_set_character_data_handler, vai especificar qual a função responsável pela manipulação dos dados dos elementos.
$file = file ("data.xml"); Linha: 36
Não é uma função XML. file() lê um arquivo e coloca suas linhas em diferentes índices de uma matriz.
foreach ($file as $line) { Linha: 38
Não é uma função XML. Para cada linha do arquivo...
xml_parse ($parser, $line); Linha: 40
Interpreta a linha fornecida. O PHP se encarregará de reconhecer e distingüir elementos de dados.
xml_parser_free ($parser); Linha: 44
Libera a memória usado pelo parser criado.
As funções criadas são simples demais, simplesmente exibem os elementos passados. Não tem segredo nelas.
Com um pouco mais de criatividade, pode-se fazer alguns exemplos mais interessantes. (hehehe... parece tutorial de Photoshop...)
Veja outro exemplo - Veja o código-fonte
[]´s e sucesso a todos!