M4n0w4r 0 Denunciar post Postado Julho 20, 2010 Olá galera do bem Eu procurei por muito tempo na net um script que converte arquivos ofx para xml e so achei um único código e ainda incompleto. Não sei como não pode ter uma coisa tão básica que muita gente deve precisar ou vai precisar futuramente. Fiz o tal script e é totalmente funcional so que preciso da ajuda de todos para melhorá-lo ainda mais, fiquem a vontade para modificar e compartilhar. // A modificação do corpo foi baseado em http://holloway.co.nz/subaccounting/ofx_sgml_to_xml.phps<?php function sgmlParaXml ($conteudo) { if (! $comecaOfx = strpos ($conteudo, "<OFX>")) throw new exception ("Tag OFX não encontrada."); // Cabeçalho $cabecalho = substr ($conteudo, 0, $comecaOfx); // Não precisa de excessão já que $comecaOfx passou na função strpos $linhas = explode ("n", $cabecalho); // Não precisa de excessão, sempre vai retornar um array, vazio ou não $cabecalho = ""; $i = 0; foreach ($linhas as $linha) { $separados = explode (":", $linha); if (count ($separados) === 2) { if ($separados[1] !== "") { $separados[0] = trim ($separados[0]); if ($separados[0] === "OFXHEADER" || $separados[0] === "VERSION" || $separados[0] === "SECURITY" || $separados[0] === "OLDFILEUID" || $separados[0] === "NEWFILEUID") { if ($separados[0] === "OFXHEADER") { $separados[1] = "200"; } else if ($separados[0] === "VERSION") { $separados[1] = "211"; } $cabecalho .= $separados[0] . " = "" . strtoupper ($separados[1]) . "" "; $i ++; } } } } if ($i !== 5) throw new exception ("Sgml possui cabeçalho inválido."); $cabecalho = "<?OFX " . $cabecalho . "?>"; // Corpo $corpo = substr ($conteudo, $comecaOfx); // Não precisa de excessão já que $comecaOfx passou na função strpos if (! preg_match_all ("/</[^>]+>/", $corpo, $fechaTags)) throw new exception; $fechaTags = array_fill_keys ($fechaTags[0], null); $linhas = explode ("n", $corpo); $corpo = ""; foreach ($linhas as $linha) { $corpo .= trim ($linha); if (preg_match_all ("/<[^/>]+>/", $linha, $comecaTags)) { $comecaTags[0] = array_reverse ($comecaTags[0]); foreach ($comecaTags[0] as $comecaTag) { $fechaTag = "</" . substr ($comecaTag, 1); if (! array_key_exists ($fechaTag, $fechaTags)) { $corpo .= $fechaTag; } } } } // É impossível pelos diversos tratamentos de erros acima que a variável $corpo seja vazia return $cabecalho . $corpo; } // Exemplo $conteudo = " OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE <OFX> <SIGNONMSGSRSV1> <SONRS> <STATUS> <CODE>0 <SEVERITY>INFO </STATUS> <DTSERVER>00000000000000[-03:EST] <LANGUAGE>POR </SONRS> </SIGNONMSGSRSV1> </OFX> "; try { echo sgmlParaXml ($conteudo); header ("Content-type: text/xml"); } catch (exception $e) { echo $e; }?>Foi mal não é converter sgml para xml e sim ofx para xml Compartilhar este post Link para o post Compartilhar em outros sites