quarta-feira, 24 de junho de 2009

Lendo um XML apartir de uma String em PHP

Bom, estava a precisar de um código que lesse um XML apartir de uma string vinda de um Webservice. Até ai tudo bem, mas o XML vem com varios nodes e eu queria algo que lesse o XML identificasse cada node e dai faria o que queria com as informações. Primeiro eu encontrei no proprio php.net uma forma de leitura até boa, porém eu teria que colocar pra cada caso seus nodes o que tornaria o código bem extenso, a form foi a seguinte:

$xmlDados = new DOMDocument();
$xmlDados->loadXML($objDadosService->enviarDados());
$flagA = $xmlDados->getElementsByTagName( "node" );
foreach( $flagA as $flag )
{
$codigo = $flag->getElementsByTagName( "codigo" );
$codigo = $codigo->item(0)->nodeValue;

$data_cadastro = $flag->getElementsByTagName( "data_cadastro" );
$data_cadastro = $data_cadastro->item(0)->nodeValue;

$quarto = $flag->getElementsByTagName( "quarto" );
$quarto = $quarto->item(0)->nodeValue;

$cliente = $flag->getElementsByTagName( "cliente" );
$cliente = $cliente->item(0)->nodeValue;

echo "$codigo - $data_cadastro - $quarto - $cliente
";
}
?>

uma boa solução para um xml pequeno, porém o XML que estou a analizar tem varias tag e essas tag podem ser diferentes então fiz a seguinte função:

Parametros:
$xmlDoc: objeto DomDocument, já com XML carregado.
$flag: node que se deseja ler e importar para um array

Retorno:
Um array com os valores daquele node.


function readXML($xmlDoc,$flag = "")
{
$nodeFlag = $xmlDoc->getElementsByTagName( $flag );
if ( $nodeFlag->length )
{
$arrFlag = array();
for ( $k = 0; $k < $nodeFlag->length; $k++)
{
$nodes = $nodeFlag->item(0)->getElementsByTagName( "*" );
for ( $i = 0; $i < $nodes->length; $i++ )
{
$arrFlag[$k][$nodes->item( $i )->nodeName] = $nodes->item( $i )->nodeValue;
}
}
return $arrFlag;
}
else
{
return false;
}

}

# Exemplo: #

$xmlDados = new DOMDocument();
$xmlDados->loadXML("


Fulanofulano@fulano.com.br


Cicranocicrano@fulano.com.br


Beltranobeltrano@fulano.com.br

TeresaPortuguês");

$arrFlags = array();
$arrFlags = readXML($xmlDados,"alunos");



O resultado será um array com os dados dos alunos !

Nenhum comentário:

Postar um comentário