Ver Mensaje Individual
  #13 (permalink)  
Antiguo 17/06/2008, 05:22
falotron
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Tratar archivo XML con PHP

Y ya puestos... por si alguien se viera en la misma situación (tener PHP4 instalado en el server, y querer leer/tratar un archivo XML con SimpleXML) posteo el código con sus explicaciones, a modo de HOWTO, ya que creo que habrá pocos ficheros XML más "complejos" de leer que éste, con su estructura...

Lo 1º es instalar esta portabilidad de SimpleXML para PHP4
http://www.syntaxerror.es/2008/02/11/simplexml-para-php4

En ese link hay un tutorial cojonudo

archivo.xml
Código:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<punter-odds>
	<game id="2646200" date="20080616" time="2045">
		−
		<description>
			<category id="SOCMENEUREURMCS" order="300">Euro 2008 - Matches</category>
			Poland - Croatia
		</description>
		<type id="0"/>
		−
		<alternatives>
			<alternative odds="2.40" team="26491">1</alternative>
			<alternative odds="3.55" team="26491">X</alternative>
			<alternative odds="2.85" team="51148">2</alternative>
		</alternatives>
	</game>
	−
	<game id="2646214" date="20080616" time="2045">
		−
		<description>
			<category id="SOCMENEUREURMCS" order="300">Euro 2008 - Matches</category>
			Austria - Germany
		</description>
		<type id="0"/>
		−
		<alternatives>
			<alternative odds="9.00" team="5211">1</alternative>
			<alternative odds="4.80" team="5211">X</alternative>
			<alternative odds="1.37" team="51189">2</alternative>
		</alternatives>
	</game>
	−
</punter-odds>
Código PHP
(ignoro la parte del tratamiento de los datos, éso ya a gusto del consumidor xD)
Código PHP:
require_once 'IsterXmlSimpleXMLImpl.php';

//Creamos el objeto principal
$xml_object = new IsterXmlSimpleXMLImpl;

$doc $xml_object->load_file('archivo.xml');


//Recorremos cada 'game'

foreach($doc->{'punter-odds'}->game as $game)
{

    
//Atributos de cada 'game'
    
$atributos $game->attributes();
    
//Recogemos el ID
    
$id $atributos['id'];

    
//Por ejemplo, para imprimir 'date' o 'time' sería...
    //print ''.$atributos['date'].' ';
    //print ''.$atributos['time'].'';

    //Para obtener LIGA (category) + EVENTO (description), usamos CDATA...
    
$liga $game->description->category->CDATA();
    
$evento $game->description->CDATA();

    
//CUOTAS (odds)
    
foreach($game->alternatives->alternative as $cuotas)
{
    
$at_cuotas $cuotas->attributes();
    
// para mostrar el valor de 'odds' sería $at_cuotas['odds']
    // seleccion es la apuesta elegida (por ejemplo: 1, X o 2)
    
$seleccion $cuotas->CDATA();
}


Espero haber ayudado a alguien con ésto