Foros del Web » Programando para Internet » PHP »

Ayuda leyendo XML desde PHP

Estas en el tema de Ayuda leyendo XML desde PHP en el foro de PHP en Foros del Web. He mirado el FAQ de epplestun sobre sacar textos de un XML usando PHP y he estado probando cosas. El problema es que me he ...
  #1 (permalink)  
Antiguo 30/10/2003, 09:24
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Ayuda leyendo XML desde PHP

He mirado el FAQ de epplestun sobre sacar textos de un XML usando PHP y he estado probando cosas.

El problema es que me he quedado encallado en algo que supongo que no es muy complejo.

La idea era redefinir el XML para que contuviera tanto los nombres como los contenidos de las variables, así:

english.xml:
Código:
<language>
    <cadena>
		<nom>un</nom>
		<contingut>one</contingut>
	</cadena>
    <cadena>
		<nom>dos</nom>
		<contingut>two</contingut>
	</cadena>
    <cadena>
		<nom>tres</nom>
		<contingut>three</contingut>
	</cadena>
</language>
A partir de esto, necesito lograr un array tal que así:

Cita:
Array ( [un] => one [dos] => two [tres] => three )
Pero no he logrado más que esto:

Cita:
Array ( [un] => un [one] => one [dos] => dos [two] => two [tres] => tres [three] => three )
El código que estoy usando, es:
Código PHP:
<?php
class lang {
    var 
$word  = array();
    
    function 
loadLanguage($lang "english.xml") {
        
$xml    implode(""file(dirname(__FILE__)."/".$lang));
        
$parser xml_parser_create();
        
xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
        
xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
        
xml_parse_into_struct($parser$xml$vals$tags);
        
xml_parser_free($parser);
        
$i 0;
        foreach(
$vals as $key => $value) {
            if(!empty(
$value['value'])) {
                
$this->word[$value['value']] = $value['value'];
                
$i++;
            }
        }
        return 
$this->word;
    }
    
    function 
viewInfo() {
        
$this->loadLanguage();
        return 
print_r($this->word);
    }
}
$lang   = new lang();
$lang -> viewInfo();
$labels =& $lang -> loadLanguage();
echo 
$labels['FILE'];
?>
La idea es poder sacar la cantidad y los nombres de las variables a partir del XML (sin tener que definirlos también en el PHP) y poderlas llamar con $labels[$nom];
__________________
M a l d i t o F r i k i

Última edición por Cain; 30/10/2003 a las 09:25
  #2 (permalink)  
Antiguo 30/10/2003, 09:47
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Utilizando un poco de "programación creativa" he logrado hacer funcionar el script como a mi me interesa. Simplemente he cambiado el trozo del foreach por por:

Código PHP:
<?
foreach($vals as $key => $value) {
            if(!empty(
$value['value'])) {
                if (
$i%2==0) {$nom $value['value'];}
                else {
$this->word[$nom] = $value['value'];}
                
$i++;
            }
        }
?>
Sin embargo, si alguien pudiera echarme una mano para hacer lo mismo de un modo más "programáticamente correcto" se lo agradecería un montón.

Además, también me gustaría si alguien pudiera indicarme algún manual "a prueba de tontos" sobre PHP+MySQL.
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 30/10/2003, 10:03
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Buenas Cain, yo iria poco a poco ,es decir, te recomiedno que generes el array apartir de la estructura de tu XML, y despues de ello hagas print_r($vals) y print_r($tags) ahi veras lo que te devuelven, y el tema ya es trabajar con arrays.

De todas maneras ... viendo el code tuyo podrias hacer algo como:
Código:
<language>
    <cadena name="uno">

		<contingut>one</contingut>
	</cadena>
    <cadena name="dos">
		
		<contingut>two</contingut>
	</cadena>
    <cadena name="tres">

		<contingut>three</contingut>
	</cadena>
</language>
Y el array te devolvera los datos

Es cuestion de probar :P
__________________
Usuario registrado de Linux #288725
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 19:40.