Foros del Web » Programando para Internet » PHP »

Problema parsear campo de un xml

Estas en el tema de Problema parsear campo de un xml en el foro de PHP en Foros del Web. Hola que tal, tengo un pequeño problema y la verdad no doy mas, ya lo intente por todo lado. La idea es parsear y mostrar ...
  #1 (permalink)  
Antiguo 25/06/2008, 16:48
Avatar de oscarva  
Fecha de Ingreso: agosto-2004
Ubicación: Bogota - Colombia
Mensajes: 425
Antigüedad: 19 años, 9 meses
Puntos: 2
Problema parsear campo de un xml

Hola que tal, tengo un pequeño problema y la verdad no doy mas, ya lo intente por todo lado. La idea es parsear y mostrar todos los campos, pero no puedo mostrar el campo image que esta mas abajo en el archivo xml

El parser php es el siguiente:

Código PHP:
<?php
$file 
"xxx.xml";
$rss_channel = array();
$currently_writing "";
$main "";
$item_counter 0;

function 
startElement2($parser$name$attrs) {
       global 
$rss_channel$currently_writing$main;
       switch(
$name) {
           case 
"RSS":
           case 
"RDF:RDF":
           case 
"ITEMS":
               
$currently_writing "";
               break;

           case 
"IMAGE":
               
$main "IMAGE";
               
$rss_channel["IMAGE"] = array();
               break;
            
           case 
"ALBUM":
               
$main "ITEMS";
               break;
        case 
"TOPALBUMS":
               
$main "TOPALBUMS";
               break;
           default:
               
$currently_writing $name;
               break;
       }
}

function 
endElement2($parser$name) {
       global 
$rss_channel$currently_writing$item_counter;
       
$currently_writing "";
       if (
$name == "ALBUM") {
           
$item_counter++;
       }
}

function 
characterData2($parser$data) {
    global 
$rss_channel$currently_writing$main$item_counter;
    if (
$currently_writing != "") {
        switch(
$main) {

            case 
"IMAGE":
                if (isset(
$rss_channel[$main][$currently_writing])) {
                    
$rss_channel[$main][$currently_writing] .= $data;
                } else {
                    
$rss_channel[$main][$currently_writing] = $data;
                }
                break;
            case 
"ITEMS":
                if (isset(
$rss_channel[$main][$item_counter][$currently_writing])) {
                    
$rss_channel[$main][$item_counter][$currently_writing] .= $data;
                } else {

                    
$rss_channel[$main][$item_counter][$currently_writing] = $data;
                }
                break;
        }
    }
}

$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement2""endElement2");
xml_set_character_data_handler($xml_parser"characterData2");
if (!(
$fp fopen($file"r"))) {
    die(
"No Results");
}

while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($fp))) {
        die(
sprintf("XML error: %s at line %d",
                    
xml_error_string(xml_get_error_code($xml_parser)),
                    
xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);

// output as HTML

if (isset($rss_channel["ITEMS"])) {
    


    if (
count($rss_channel["ITEMS"]) > 0) {
        for(
$i 0;$i count($rss_channel["ITEMS"]);$i++) {
            
            if (
$i '10') {
            

            
print (
"\n 
            
<div>" 
$rss_channel["ITEMS"][$i]["NAME"] . "</div>

"
);
            }
            
            
        }
    } else {
        print (
"<b>No data found.</b>");
    }
}

?>
Y el archivo xxx.xml que quiero parsear tiene el siguiente formato:

Código:
<topalbums artist="xxx">
  <album>
    <name>album name</name>
    <url>http://www.page.com</url>
    <image>
      <large>
       http://wwww.page.com/imagen.jpg
      </large>
    </image>
   </album>
</topalbums>
Puedo mostrar sin ningun problema con el parser los campos <name> o <url> pero no logro mostrar el campo <large> de <image>

alguna ayuda por favor?

Un saludo
  #2 (permalink)  
Antiguo 25/06/2008, 18:03
isra00
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema parsear campo de un xml

Siento no saber ayudarte. Has probado con otro parser? A mí me gusta simpleXML.
  #3 (permalink)  
Antiguo 25/06/2008, 18:24
Avatar de oscarva  
Fecha de Ingreso: agosto-2004
Ubicación: Bogota - Colombia
Mensajes: 425
Antigüedad: 19 años, 9 meses
Puntos: 2
saludos isra00 el problema es que trabajo con php 4


saludos

Una yuda por favor :(

ayudaa plis :( esto me esta sacando canas.

Última edición por GatorV; 27/06/2008 a las 14:27
  #4 (permalink)  
Antiguo 27/06/2008, 14:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema parsear campo de un xml

Hola oscarva,

¿Haz probado usar el SimpleXML para PHP4?

Saludos.
  #5 (permalink)  
Antiguo 27/06/2008, 14:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema parsear campo de un xml

Hola oscarva,

¿Haz probado usar el SimpleXML para PHP4?

Saludos.
  #6 (permalink)  
Antiguo 27/06/2008, 21:56
Avatar de Blunk  
Fecha de Ingreso: septiembre-2006
Mensajes: 145
Antigüedad: 17 años, 7 meses
Puntos: 4
Respuesta: Problema parsear campo de un xml

SimpleXML es lo mejor...
igualmente si queres podes probar este tambien

http://minixml.sourceforge.net/
  #7 (permalink)  
Antiguo 28/06/2008, 09:03
Avatar de oscarva  
Fecha de Ingreso: agosto-2004
Ubicación: Bogota - Colombia
Mensajes: 425
Antigüedad: 19 años, 9 meses
Puntos: 2
Respuesta: Problema parsear campo de un xml

gracias GatorV y Blunk. SimpleXML se ve bastante bien, muy simple de usar, la voy a probar.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:45.