+1

Formatando documentos XML com Expat + PHP

criado por Luciano Rodrigues Furtado em 09/04/2002 7:18am
Para se formatar um documento XML utilizando o método Expat existem basicamente 6 passos:

- definir uma função que será chamada quando uma tag inicial for encontrada (no meu exemplo seria a função "inicioElemento")

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

- definir uma função que será executada quando dados de caractere forem encontrados (no meu exemplo seria a função "dadosElemento")

- registrar as funções de início e fim de tag com a função "xml_set_element_handler"

- registrar a função de tratamento de caractere com a função "xml_set_character_data_handler"

- criar o parser utilizando a função "xml_parser_create"

Depois que os passos anteriores tenham sido realizados basta passar o documento XML ao nosso parser através da função "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>

Comentários:

Mostrando 1 - 9 de 9 comentários
Pedro Junior disse:
tenho esse parser e olha o e acontece

///////////////////////////////////////////////////

<?php
global $idProd;

$XML = "<?xml version='1.0' encoding='ISO-8859-1' ?>
<pedidos>
<usuario>1</usuario>
<cli>2</cli>
<data>2004-3-18 13:48:0</data>
<desconto>0,00</desconto>
<obs>-</obs>
<tpag>0</tpag>
<fpag>0</fpag>

<item>
<idProd>9</idProd>
<quant>12331</quant>
</item>
<item>
<idProd>12</idProd>
<quant>123</quant>
</item>
<item>
<idProd>14</idProd>
<quant>13</quant>
</item>
</pedidos>";

global $arrayItensIdProd; // $arrayItensIdProd = array();
global $arrayItensQuant; // $arrayItensQuant = array();

function inicioElemento($parser, $nomeTag, $atributos){
global $tagAtual;
global $nItens;

$tagAtual = $nomeTag;
}

function fimElemento($parser, $nomeTag){
global $valorAtual;

if ($nomeTag == "USUARIO") echo "Usuário: ". trim($valorAtual['USUARIO']);
if ($nomeTag == "CLI") echo "<br>Cliente: ". trim($valorAtual['CLI']);
if ($nomeTag == "DATA") echo "<br>Data: ". trim($valorAtual['DATA']);
if ($nomeTag == "DESCONTO") echo "<br>Desconto: ". trim($valorAtual['DESCONTO']);
if ($nomeTag == "OBS") echo "<br>Obs: ". trim($valorAtual['OBS']);
if ($nomeTag == "TPAG") echo "<br>Tipo de Pagamento: ". trim($valorAtual['TPAG']);
if ($nomeTag == "FPAG") echo "<br>Forma de Pagamento: ". trim($valorAtual['FPAG']);

// Pega os itens do pedido e grava num array
if ($nomeTag == "IDPROD") $arrayItensIdProd .= $valorAtual['IDPROD'] . ","; // ID do Produto
if ($nomeTag == "QUANT") $arrayItensQuant .= $valorAtual['QUANT'] . ","; // Quantidade de produtos

echo $arrayItensIdProd;
// echo $arrayItensQuant;
$idProd = $arrayItensIdProd;

$valorAtual = null;

}

function dadosElemento($parser, $dados){
global $valorAtual, $tagAtual;
$valorAtual[$tagAtual] .= $dados;
}

echo $arrayItensIdProd;

$meuParser = xml_parser_create();
xml_set_element_handler($meuParser, "inicioElemento", "fimElemento");
xml_set_character_data_handler($meuParser, "dadosElemento");
xml_parse($meuParser, $XML);
xml_parser_free($meuParser);

echo $idProd;

?>
///////////////////////////////////////////////////

na última linha tento mostro o $idProd e ele está vazio?????????????
01/04/2004 9:54am (~20 anos atrás)

É isso aí galera. É só preparar tudo para sair em XML, daí fica mole mole!!
28/08/2003 7:09am (~21 anos atrás)

Walter,

procure pelo suporte do PHP ao ODBC

basicamente vc de ve criar um DSN e utilizar
o suporte do php ao ODBC para fazer as consultas esse link deve esclarecer algumas coisas para vc http://www.php.net/manual/pt_BR/ref.odbc.php
09/03/2003 10:40am (~22 anos atrás)

Onde encontro maiores informações de como se utilizar XML com PHP?
Gosto de XML, mas não sei trabalhar com ele... e gostaria muito de aprender, mas só vejo pur ai... XML & ASP, XML & JAVA, XML & SOAP.... mas i XML & PHP?? ondi ki eu axo?
13/04/2002 5:50pm (~22 anos atrás)

na minha opinião seria a possibilidade de
se separar a apresentacao dos dados
do conteudo dos dados ,o que facilitaria para uma pessoa que estivesse interessada em
disponibilizar o conteudo do meu site no site
dela a unica coisa que ele teria que fazer é
acessar o meu documento XML e formata-lo
caso contrario ela teria que construir um parser para retirar as informções que ela queria do meu documento HTML
11/04/2002 9:18pm (~22 anos atrás)

Quais as principais vantagens de se utilizar XML num site ? acho q faltou isso no artigo, mas está bom ! :-)
11/04/2002 3:45pm (~22 anos atrás)

O Xml trouxe muita facilidade a programação, especialmente com PHP e Java. A programação ficou bem mais rapida e os resultados sempre satisfatorios.
11/04/2002 10:53am (~22 anos atrás)

Tambem achei interessante, stava atraz disso !

Estou trabalhando com JAVA e XML, e é algo que agiliza bastante o trabalho. Usamos o próprio parser da Oracle, muito bom.

Você apenas faz o selec e ele te retorna em tags.
Ex:
SELECT nome,fone FROM usuarios;

Retorna
<RAIZ>
<usuarios>
<nome>Apoena</nome>
<fone>232-3233</fone>
</usuarios>
<usuarios>
<nome>Luciano</nome>
<fone>535-35353</fone>
</usuarios>
<usuarios>
<nome>Fulano</nome>
<fone>535-3653</fone>
</usuarios>
</RAIZ>
10/04/2002 5:11pm (~22 anos atrás)

Muito Interressante esse artigo sobre XML e PHP,
bem que eu tava atras de funcoes que manipulassem XML via PHP.
Foi de uma ajuda e tanto.
10/04/2002 1:40pm (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)