Formatando documentos XML com Expat + PHP
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
noticias.xml
- 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>
É 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
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?
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
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>
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.
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)
///////////////////////////////////////////////////
<?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?????????????