de xml a php

Ayl?
09 de Agosto del 2008
Necesito un código con el cual pueda mostrar los datos de un xml en una página con php.

at-elah
09 de Agosto del 2008
Busca alguna clase que parsee xml.

Pero en realidad depende de que tipo de xml, uses y que tags tenga.


my2kbsd
09 de Agosto del 2008
Aqui publico un ejemplo, de todos modos lo envio a tu cuenta, ok.

este es archivo notas.xml
-----------------
<?xml version="1.0" encoding="iso-8859-1"?>
<notas asignaturas="SSOO">
<alumno>
<matricula>num 1</matricula>
<nombre>Nombre 1</nombre>
<apellidos>Apellidos 1</apellidos>
<teoria>8</teoria>
<practicas>9</practicas>
</alumno>
<alumno>
<matricula>num 2</matricula>
<nombre>Nombre 2</nombre>
<apellidos>Apellidos 2</apellidos>
<teoria>5</teoria>
<practicas>4.5</practicas>
</alumno>
<alumno>
<matricula>num 3</matricula>
<nombre>Nombre 3</nombre>
<apellidos>Apellidos 3</apellidos>
<teoria>9</teoria>
<practicas>7</practicas>
</alumno>
</notas>
-----------------
aqui termina archivo xml

aqui archivo php, para interpretar el xml anterior
-----------------
<?php
// variables
$notas=array();
$alumno=array();
$elemento=$materia="";
$procesar_datos=false;
$notas_alumno=$notas_teoria=$notas_practicas=0;
$notas_finales=$num_aprobados=0;

// documento XML a analizar
$documento = "notas.xml";

// 1er paso
$parser = xml_parser_create();

// 2º paso
function inicio_elemento($parser,$etiqueta,$atributos){
global $elemento,$procesar_datos,$materia;

if(($etiqueta=="notas")||($etiqueta=="alumno")){
$procesar_datos=false;
$materia=($etiqueta=="notas")?$atributos:$materia;
}else{
$procesar_datos=true;
$elemento=$etiqueta;
}
}

// 3º paso
function fin_elemento($parser,$etiqueta){
global $notas,$alumno,$procesar_datos;

// fin de alumno
if($etiqueta=="alumno"){
$notas[]=$alumno;
$alumno=array();
}
//no procesar etiqueta de cierre
$procesar_datos=false;
}

// 4º paso
xml_set_element_handler($parser, "inicio_elemento","fin_elemento");

// 5º paso
function datos($parser,$dato){
global $alumno,$elemento,$procesar_datos;

if($procesar_datos){
$alumno["$elemento"]=$dato;
}
}

// 6º paso
xml_set_character_data_handler($parser,"datos");

// 7º paso
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);

// 10º paso
function analizar_documento($parser,$documento){
if(!file_exists($documento)){
die("No se puede encontrar el archivo"$documento".");
}
if(!($fp = @fopen($documento, "r"))){
die("No se puede leer el archivo"$documento".");
}
while($data = fread($fp, 4096)){
if(!xml_parse($parser, $data, feof($fp))){
return(false);
}
}
fclose($fp);
return(true);
}

// 11º paso
if (!analizar_documento($parser,$documento)){
echo "<center><hr>Error XML: '",xml_error_string(xml_get_error_code($parser));
echo "' en la línea ",xml_get_current_line_number($parser),"<hr></center>";
}

$num_alumnos=count($notas);
echo "<html><head><title>Trabajando con XML</title></head>";
echo "<body><center><h2>Interpretando XML con PHP</h2>";
echo "<table style='font:14px Verdana;' border='0' cellpadding='2'>";
echo "<tr bgcolor='#CCCC66' align='center'><td colspan='4'>Alumno</td>";
echo "<td colspan='3'>Notas</td></tr>";
echo "<tr bgcolor='#CCCC66'><td>#</td><td>Num Lista</td>";
echo "<td>Nombre</td><td>Apellidos</td>";
echo "<td>Teoría</td><td>Prácticas</td><td>Final</td></tr>";
for($i=0;$i<$num_alumnos;$i++){
echo "<tr align='center' bgcolor='#666666'><td>",$i+1,"</td>";
$notas_alumno=0;
while (list($clave,$valor) = each ($notas[$i])) {
echo "<td>$valor</td>";
if($clave=="teoria"){
$notas_alumno+=$valor;
$notas_teoria+=$valor;
}
if($clave=="practicas"){
$notas_alumno+=$valor;
$notas_practicas+=$valor;
}
}
$notas_finales+=($notas_alumno/2);
echo "<td>",($notas_alumno/2),"</td></tr>";
if(($notas_alumno/2)>5) $num_aprobados++;
}
echo "<tr bgcolor='#CCCC66' align='center'>";
echo "<td colspan='4'>Valores medios ($num_alumnos alumnos)</td>";
echo "<td bgcolor='#CCCC66'>";
printf("%01.2f",$notas_teoria/$num_alumnos);
echo "</td>";
echo "<td bgcolor='#CCCC66'>";
printf("%01.2f",$notas_practicas/$num_alumnos);
echo "</td>";
echo "<td bgcolor='#CCCC66'>";
printf("%01.2f",$notas_finales/$num_alumnos);
echo "</td>";
echo "</tr></table>";
echo "<p><b>Nota: </b>Aprobados el ";
printf("%01.0f",($num_aprobados/$num_alumnos)*100);
echo "%</p></center></body></html>";
?>
-----------------

Ciudad de Mexico, 19:00 PM