Códigos: Classe para converter um vetor em xml
Olá pessoal.
Começo esta semana com uma classe bacana que usei para desenvolver uma alteração num módulo do componente Eventlist do Joomla.
Essa classe ( que não fui eu fiz, mas alterei ), serve para converter um vetor associativo em um arquivo xml de forma recursiva, ou seja, a classe chama o próprio método novamente de forma iterativa os níveis do vetor.
O interessante é que ela pode ser usada não somente no módulo que alterei, mas em qualquer sistema php.
Vamos lá então:
Esta classe converte um vetor assim:
$vetor = array();
$vetor['elemento'][] = array("linguagem"=>"Php");
$vetor['elemento'][] = array("linguagem"=>"Xml");
$vet = array();
$vet['Elementos'] = array($vetor);
// Chamada da classe estática que converte o vetor em xml
$xml = ArrayToXML::toXml($vet);
Em um xml assim:
<?xml version="1.0" encoding="utf-8"?> php xml
Eis a classe que faz isso:
/**
* Classe que converte um vetor pra um xml
*
* Classe que converte um vetor para xml para que possa criar o xml dos eventos
* para ser passado pro flash
*
* @package Eventlist
* @since Class available since Release 1.0.1
* @co-author Luiz Felipe Weber - Weber Scripts - weber.eti.br
*/
class ArrayToXML
{
/**
* The main function for converting to an XML document.
* Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
*
* @param array $data
* @param string $rootNodeName - what you want the root node to be - defaultsto data.
* @param SimpleXMLElement $xml - should only be used recursively
* @return string XML
*/
public function toXml($array, $level=1) {
// cria o cabecalho do xml
if ($level==1) {
$xml = '<?xml version="1.0" encoding="utf-8"?>\n';
} else {
$xml = '';
}
foreach ($array as $key=>$value) {
//$key = strtolower($key);
if (is_object($value)) {$value=get_object_vars($value);}// convert object to array
if (is_array($value)) {
$multi_tags = false;
foreach($value as $key2=>$value2) {
if (is_object($value2)) {$value2=get_object_vars($value2);} // convert object to array
if (is_array($value2)) {
$xml .= str_repeat("\t",$level)."<$key>\n";
$xml .= ArrayToXML::toXml($value2, $level+1);
$xml .= str_repeat("\t",$level)."\n";
$multi_tags = true;
} else {
if (trim($value2)!='') {
if (htmlspecialchars($value2)!=$value2) {
$xml .= str_repeat("\t",$level).
"<$key2><![CDATA[$value2]]>". // changed $key to $key2... didn't work otherwise.
"\n";
} else {
$xml .= str_repeat("\t",$level).
"<$key2>$value2\n"; // changed $key to $key2
}
}
$multi_tags = true;
}
}
if (!$multi_tags and count($value)>0) {
$xml .= str_repeat("\t",$level)."<$key>\n";
$xml .= ArrayToXML::toXml($value, $level+1);
$xml .= str_repeat("\t",$level)."\n";
}
} else {
if (trim($value)!='') {
//echo "value=$value
";
if (htmlspecialchars($value)!=$value) {
$xml .= str_repeat("\t",$level)."<$key>".
"<![CDATA[$value]]>\n";
} else {
$xml .= str_repeat("\t",$level).
"<$key>$value\n";
}
}
}
}
return $xml;
}
}
Até mais =)

















Últimos comentários