Bueno aquí luego de estar medio día tratando de parsear un archivo XML con SimpleXMLElement, finalmente:
Tengo un Xml con iso 8859-1, entonces la idea es leer el archivo con PHP, parsearlo y proceder a imprimir algunos datos en pantalla utilizando el arreglo generado del arbol Xml.
El ejemplo de XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<graficos>
<grafico id="idgrafo1">
<titulo>Título Gráfico 1</titulo>
<subtitulo>Subtítulo grafo 1</subtitulo>
<fuente>Fuente grafo 1</fuente>
<datos>
<dato>
<x>110</x>
<y>111</y>
</dato>
<dato>
<x>120</x>
<y>100</y>
</dato>
</datos>
</grafico>
<grafico id="idgrafo2">
<titulo>Título Gráfico 2</titulo>
<subtitulo>Subtítulo grafo 2</subtitulo>
<fuente>Fuente grafo 2</fuente>
<datos>
<dato>
<x>210</x>
<y>211</y>
</dato>
<dato>
<x>220</x>
<y>200</y>
</dato>
</datos>
</grafico>
</graficos>
Ahora con PHP, tenemos que leer primero el archivo podemos utilizar varias funciones, como es un archivo pequeño y no va ser utiliado muchas veces, utilizo la función read_file
una vez que hayamos leído todo el contenido del archivo XML, tenemos que parsearlo utilizando la función SimpleXMLElement, hay que tener en cuenta que el XML está en ISO-8859 1 y una vez que se parsee el archivo la función SimpleXMLElement, devuelve un arreglo codificado en UTF-8, por lo que si se desea ver las tildes en caso que existan en el XML se tedrá que decodificar al momento de imprimir en pantalla
//variable utilizada para leer guardar el contenido del archivo en memoria
$buffer="";
//Variable que posee la ruta absoluta del archivo xml a parsear
$ruta_xml="";
if (file_exists($ruta_xml)) {
$fh = fopen($ruta_xml, 'r');
$buffer = fread($fh, filesize($file));
fclose($fh);
}else{
print("No existe archivo XML");
exit();
}
// Parseando el contenido del archivo XML con la función SimpleXMLElement que devuelve un arreglo codificado en UTF-8
$xml = new SimpleXMLElement($buffer);
//Liberando a la variable del espacio en memoria
unset($buffer);
//Luego para acceder a los datos del archivo en PHP
print($xml->grafico[0]->titulo);
print($xml->grafico[0]->subtitulo);
print($xml->grafico[0]->fuente);
print($xml->grafico[0]->datos->dato[0]->x);
print($xml->grafico[0]->datos->dato[0]->y);
//Acceder a todos los datos recursivamente
$i=0;
foreach ($xml as $xml_datos) {
print("Gráfico número: ".++$i);
//Ejemplo de comparación del atributo "id" para identificar al gráfico y llamar a otra función o hacer cualquier cosa
if ($xml_datos['id']=="idgrafo1"){
printGrafo1($xml_datos);
}
//Imprimiendo codificados en UTF-8
print($xml_datos['id']);
print($xml_datos->titulo);
print($xml_datos->subtitulo);
print($xml_datos->fuente);
//Imprimiendo decodificando en ISO-8859 1 - Latin 1
print(utf8_decode($xml_datos['id']));
print(utf8_decode($xml_datos->titulo));
print(utf8_decode($xml_datos->subtitulo));
print(utf8_decode($xml_datos->fuente));
//Imprimiendo en UTF-8, en caso que se requiera en iso-8859 1 decodificar con la función utf8_decode
foreach ($xml_datos->datos->dato as $dato) {
print($dato->x);
print($dato->y);
}
}
//Eso es todo amigos!





