Formatando documentos XML com Expat + PHP

Para se formatar um documento XML utilizando o mtodo Expat existem basicamente 6 passos: 

- definir uma funo que ser chamada quando uma tag inicial for encontrada (no meu exemplo seria a funo "inicioElemento") 

- definir uma funo que sera chamada quando uma tag final for encontrada (no meu exemplo seria a funo "fimElemento") 

- definir uma funo que ser executada quando dados de caractere forem encontrados (no meu exemplo seria a funo "dadosElemento") 

- registrar as funes de incio e fim de tag com a funo "xml_set_element_handler" 

- registrar a funo de tratamento de caractere com a funo "xml_set_character_data_handler" 

- criar o parser utilizando a funo "xml_parser_create" 

Depois que os passos anteriores tenham sido realizados basta passar o documento XML ao nosso parser atravs da funo "xml_parse". 

noticias.php 
<?php 
function inicioElemento($parser,$nomeTag,$atributos){ 
  global $tagAtual; 
  $tagAtual = $nomeTag; 
} 
function fimElemento($parser,$nomeTag){ 
  global $noticiaAtual; 
  if ($nomeTag == "NOTICIA"){ 
    print "<TR><TD colspan=2>"; 
    print trim($noticiaAtual['TITULO']) . "</TD></TR>\n"; 
    print "<TR><TD>" . trim($noticiaAtual['DATA']); 
    print "</TD><TD>" .trim($noticiaAtual['AUTOR']) . "</TD></TR>\n"; 
    print "<TR>\n<TD colspan=2>\n"; 
    print nl2br(trim($noticiaAtual['TEXTO'])) . "\n</TD>\n</TR>\n"; 
    $noticiaAtual = null; 
  } 
} 
function dadosElemento($parser,$dados){ 
  global $noticiaAtual,$tagAtual; 
  $noticiaAtual[$tagAtual] .= $dados; 
} 

$meuParser = xml_parser_create(); 

xml_set_element_handler($meuParser,"inicioElemento","fimElemento"); 
xml_set_character_data_handler($meuParser,"dadosElemento"); 
$meuArquivoXML = fopen("noticias.xml","r"); 

print "<TABLE border=1>\n"; 
while(!feof($meuArquivoXML)){ 
   $meuDado = fread($meuArquivoXML,1024); 
   if (!xml_parse($meuParser,$meuDado)){ 
      $textoErro = xml_error_string(xml_error_code($meuParser)); 
      $linhaErro = xml_get_current_line_number($meuParser); 
      DIE($linhaErro . " : " . $textoErro); 
   } 
} 
print "</TABLE>\n"; 

fclose($meuArquivoXML); 

?> 


noticias.xml 


<?xml version="1.0"?> 
<JORNAL> 

<NOTICIA> 
<TITULO>Como pequeno, Cruzeiro cai no Mineirao</TITULO> 
<AUTOR>Equipe de Reportagem do jornal Estado de Minas</AUTOR> 
<DATA>04/04/2002</DATA> 
<TEXTO>O Cruzeiro jogou como um time pequeno em pleno Mineirao e pagou 
pela covardia. Diante de 33.251 pagantes o lider da Sul-Minas 
perdeu por 3 a 2 para o Corinthinas e foi eliminado nas oitavas 
de final da Copa do Brasil. Iludido pela vantagem de poder empatar 
por 0 a 0 e 1 a 1 , o time da Toca da Raposa deixou-se dominar 
,foi apatico e chegou a estar perdendo por 3 a 0 merecidamente.</TEXTO> 
</NOTICIA> 
<NOTICIA> 
<TITULO>Cruzeiro alcanca objetivos</TITULO> 
<AUTOR>Equipe de Reportagem do jornal Estado de Minas</AUTOR> 
<DATA>08/04/2002</DATA> 
<TEXTO>Ja classificado em primeiro lugar para as semifinais 
da Copa Sul-Minas,o Cruzeiro derrotou o Mamore ontem por 2 a 1, no Estadio Zama Maciel, em Patos de Minas, com dois objetivos claros: tentar um rendimento superior, como no inicio da temporada, com a volta do armador Vander ausente da equipe ha mais 
de um mes, e dar chances para Cris mostrar seu futebol e ficar proximo novamente de uma convocacao para a Selecao Brasileira.</TEXTO> 
</NOTICIA> 
</JORNAL> 

Tutorial por:
Luciano Rodrigues Furtado
Tutorial retirado do Site: phpbrasil.com 
