Foros del Web » Programando para Internet » PHP »

Extraar todo un XML en ARRAY

Estas en el tema de Extraar todo un XML en ARRAY en el foro de PHP en Foros del Web. Hola a todos, Vereis tengo unos datos almacenados en un XML, y quiero poder acceder a todos los elementos para usarlo, os comento mi problema. ...
  #1 (permalink)  
Antiguo 03/04/2007, 10:41
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Extraar todo un XML en ARRAY

Hola a todos,

Vereis tengo unos datos almacenados en un XML, y quiero poder acceder a todos los elementos para usarlo, os comento mi problema.

He logrado con facilidad que interprete esto:
<etiqueta>DATO A EXTRAER</etiqueta>

PERO no consigo de ninguna manera, sacar datos de un grupo de etiquetas:
<grupo>
<etiqueta>cgcgfsdgf</etiqueta>
<etiqueta>cgcgfsdgf</etiqueta>
<etiqueta>cgcgfsdgf</etiqueta>
</grupo>


Y tampoco puedo sacar los datos que están dentro de una etiqueta:
<etiqueta num=12></etiqueta>

No puedo hacerlo de ningun de las maneras, y se que hay funciones que tiene la gente que puede pasarte todo el xml en una matriz simplemente, pero ni lo encuentro ni creo que pudiera comprenderlo.


Porfavor que alguien me ayude porque nunca había estado tan atascado.

Salu2
  #2 (permalink)  
Antiguo 03/04/2007, 14:48
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Re: Extraar todo un XML en ARRAY

Enserio a nadie se le ocurre como ayudarme? o tiene algun script que lo haga?
  #3 (permalink)  
Antiguo 03/04/2007, 15:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 23
Antigüedad: 19 años
Puntos: 0
Re: Extraar todo un XML en ARRAY

Buenas,

Como son las cosas nooO!, yo estoy buscando lo contrario, es decir quiero generar desde PHP una simple estructura XML, he usado DOM y lo he logrado el problema es que el server donde tengo contratado el servicio no soporta esta tecnología, talvez sepas algo al respecto y me pasas el dato ps.

Ahora respecto a tu inquietud existe una clase para esto, espero que te sirva ahí ta el link

hansanderson[.]com/php/xml/

Ya me contarás como te fue. Saludos,
  #4 (permalink)  
Antiguo 03/04/2007, 15:59
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Re: Extraar todo un XML en ARRAY

Voy a revisar tu enlace con más detenimiento, pero para lo que tu quieres ahcer, creo que la clase DOMIT te lo solucionará, la verdad tampoco me he parado a pensar en crear xml desde php, jejejejej.

Salu2 y gracias !!!
  #5 (permalink)  
Antiguo 03/04/2007, 16:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Extraar todo un XML en ARRAY

Para erikrocha:

Su uso:
Código PHP:
<?php
$xml 
= new GeckoXML"personas" );

$persona1 $xml->createNode"persona" );
$persona1->setAttribute"id");
$nombre1 $persona1->createNode"nombre" );
$nombre1->setData"Fulanito" );

$persona2 $xml->createNode"persona" );
$persona2->setAttribute"id");
$nombre2 $persona2->createNode"nombre" );
$nombre2->setData"Sutanito" );

echo 
$xml;
/*
Imprime:
<?xml version="1.0" encoding="utf-8" ?>
<personas>
<persona id="1">
<nombre><![CDATA[Fulanito]]></nombre>
</persona>
<persona id="2">
<nombre><![CDATA[Sutanito]]></nombre>
</persona>
</personas>
*/
?>
La clase:
Código PHP:
<?php
/**
 * GeckoXML
 * 
 * @package com.geckowd.utils;
 * @author Christopher Valderrama <[email protected]>
 * @copyright Copyright (c) 2006
 * @version $Id$v1.0$26 Oct 2006
 * @access public
 **/
class GeckoXML {
    private 
$name;
    private 
$childs;
    private 
$attributes;
    private 
$data;
    private 
$addVer;
    private 
$version;
    
    
/**
     * Constructor
     *
     * Creates a new XML Document/Node
     *
     * If AddV is true, a XML Document is created, otherwise, a node is returned
     *
     * @param string $name
     * @param boolean $addv
     * @access public
     **/
    
public function __construct$name$addv true ) {
        
$this->name $name;
        
$this->childs = array();
        
$this->attributes = array();
        
$this->data "";
        
$this->addVersion false;
        
$this->version "";
        if( 
$addv )
            
$this->addVersion();
    }
    
    
/**
     * addVersion
     *
     * Adds the XML Version and encoding to a XML Document
     *
     * @param string $version XML Version
     * @param string $encoding XML Encoding
     * @access private
     * @return void
     **/
    
private function addVersion$version "1.0"$encoding "utf-8" ) {
        
$this->version "<?xml version=\"$version\" encoding=\"$encoding\" ?>";
        
$this->addVer true;
    }
    
    
/**
     * createNode
     *
     * Creates a new Child Node for the current node/document
     * 
     * @param string $name The Node Name
     * @access public
     * @return GeckoXML A new Node
     **/
    
public function createNode$name ) {
        
$node = new self$namefalse ); 
        
$this->childs[] = $node;
        
        return 
$node;
    }
    
    
/**
     * appendChild
     *
     * DEPRECATED
     *
     * @param GeckoXML node
     * @return GeckoXML node
     * @access public
     **/
    
public function appendChildGeckoXML $node ) {
        
$this->childs[] = $node;
        
        return 
$node;
    }
    
    
/**
     * setAttribute
     *
     * Sets a attribute for this node
     *
     * @param string $name Attribute Name
     * @param string $value Attribute Value
     * @access public
     * @return void
     **/
    
public function setAttribute$name$value ) {
        
$this->attributes[$name] = $value;
    }
    
    
/**
     * setAttributes
     *
     * From a key/value Array, it set's several attributes to a Node
     *
     * @param array $attributes The Attributes array
     * @throws Exception
     * @access public
     * @return void
     **/
    
public function setAttributes$attributes ) {
        if( !
is_array$attributes ) ) {
            throw new 
Exception'$attributes expected to be a array, ' gettype$attributes ) . ' given' );
        }
        
        foreach( 
$attributes as $name => $value ) {
            
$this->setAttribute$name$value );
        }
    }
    
    
/**
     * setData
     * 
     * Set's node inner data, it can cast Arrays, and objects
     *
     * @param mixed $data Node data
     * @throws Exception when no cast is found
     * @access public
     * @return void
     **/
    
public function setData$data ) {
        if( !
is_string$data ) ) {
            
$data $this->varToString$data );
        }
        
        
$this->data "<![CDATA[" $data "]]>";
    }
    
    
/**
     * toString
     *
     * This function converts the object to a XML Representation (magic PHP function)
     *
     * @access public
     * @return string
     **/
    
public function __toString() {
        
$name $this->name;
        
$data $this->data;
        
$xml "";
        
$attrs "";
        
        if( 
count$this->attributes ) > ) {
            foreach( 
$this->attributes as $aname => $avalue ) {
                
$attrs .= " $aname=\"$avalue\"";
            }
        }
        
        if( empty( 
$data ) && ( count$this->childs ) > ) ) { // Node tag get childs
            
$begintag "<$name$attrs>";
            
$endtag "</$name>";
            foreach( 
$this->childs as $child ) {
                
$xml .= $child->toString();
            }
            
$xml $begintag $xml $endtag;
        } else {
            if( empty( 
$data ) ) { // empty node
                
$xml "<$name$attrs />";
            } else {
                
$xml "<$name$attrs>$data</$name>";
            }
        }
        
        if( 
$this->addVer ) {
            
$xml $this->version $xml;
        }
        
        return 
$xml;
    }
    
    
/**
     * saveXML
     *
     * Saves the XML Object to the Filesystem
     *
     * @param string $fname File Name
     * @access public
     * @throw Exception
     * @return boolean
     **/
    
public function saveXML$fname ) {
        
$fh = @fopen$fname"w" );
        if( !
$fh ) {
            throw new 
Exception"Unable to open " $fname );
        }
        
        
$rst fwrite$fh$this->toString() );
        if( 
$rst === false ) {
            throw new 
Exception"Unable to write to " $fname );
        }
        
        return 
fclose$fh );
    }
    
    
/**
     * streamXML
     *
     * Writes the header, and streams the XML Document
     *
     * @access public
     * @throw Exception
     * @return void
     **/
    
public function streamXML() {
        if( 
headers_sent() ) {
            throw new 
Exception"Headers already sent!, check your code" );
        }
        
        
header"Content-type: text/xml" );
        echo 
$this->toString();
    }
    
    
/**
     * varToString
     *
     * Converts a Variable to a String representation
     *
     * @param mixed $data
     * @access private
     * @return string
     **/
    
private function varToString$data ) {
        if( 
is_array$data ) ) {
            return 
print_r$datatrue );
        }
        
        if( 
is_object$data ) ) {
            return 
get_object_vars$data );
        }
        
        if( 
$data instanceof GeckoXML ) {
            return 
$data->toString();
        }
        
        throw new 
Exception'$data no conversor for this type of var: ' gettype$data ) );
    }
}
?>
  #6 (permalink)  
Antiguo 03/04/2007, 19:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 3 meses
Puntos: 8
Re: Extraar todo un XML en ARRAY

GatorV, me aparece un error con el metodo toString(), no lo encuentra definido en la clase.

Código:
<b>Fatal error</b>:  Call to undefined method GeckoXML::toString() in <b>C:\xampp\htdocs\oop\GeckoXML\GeckoXML.php</b> on line <b>220</b><br />
^
no sé si es correcto, agregué el siguiente método y funcionó:

Código PHP:
private function toString() {
        return 
$this->__toString();
    } 
Encontré tu clase una maravilla, muy similar a DOM de php, además emplea el concepto de composite patterns.

saludos.

PD: Ojalas que algún día puedas publicar tu FrameWork, debe de ser un lujo.
  #7 (permalink)  
Antiguo 04/04/2007, 03:49
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Re: Extraar todo un XML en ARRAY

Y mi problema, nadie me puede dar un procedimiento parecido al anterior descrito por GastorV pero en orden inverso? que interprete el XML ??

Gracias !!!!!!
  #8 (permalink)  
Antiguo 04/04/2007, 06:16
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Extraar todo un XML en ARRAY

espero que esto te sirva.
es simpleXML y te arma una estructura de arrays a partir de
un xml.

ar2.php.net/simplexml
www-programacionweb.net/articulos/articulo/?num=228

saludos
  #9 (permalink)  
Antiguo 04/04/2007, 07:55
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Re: Extraar todo un XML en ARRAY

Si, creo que usaré lo que me has recomendado simplexml , pero tengo una duda muy muy muy muy importante.

Yo necesito sacar los datos de un archivo xml remoto, en otra web, como lo cargo en una variable, por ejemplo $xml .

Como cargo todo el xml remoto en una variable ?????


Salu2 !!!!!!!
  #10 (permalink)  
Antiguo 04/04/2007, 08:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Extraar todo un XML en ARRAY

@zsamer: ups, justo estaba cambiando una funcion y se me "olvido" cambiar todo el codigo

Algun dia lo pubicare solo estoy preparando un poco de tiempo para hacer el sitio (el cual ya esta arriba)

Salu2
  #11 (permalink)  
Antiguo 04/04/2007, 08:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Extraar todo un XML en ARRAY

Si tu proveedor lo soporta puedes usar fopen o file_get_contents con el sitio ej:

Código PHP:
$xml file_get_contents"http://www.sitio.com/archivo.xml" ); 
Si no vas a tener que usar sockets para leer el archivo.
  #12 (permalink)  
Antiguo 04/04/2007, 08:09
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Re: Extraar todo un XML en ARRAY

Voy a probarlo, pero de hecho son los sockets lo que no puedo usar...es un host gratis por ahora.

Pues no, esa funcion tampoco la puedo usar, alguna idea ?

Última edición por .:Chimera:.; 04/04/2007 a las 08:21
  #13 (permalink)  
Antiguo 13/05/2007, 21:28
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 4 meses
Puntos: 43
Re: Extraar todo un XML en ARRAY

buenas, ya que no pudieron responderme en el post que abri, a lo mejor aca me puedan ayudar.
Lo que intento hacer es una aplicacion que recoja datos de un xml generado a partir de un archivo asp, podre usarlo con simplexml ?

mi post original es este:
http://www.forosdelweb.com/f18/xml-php-487056/

desde ya muchas gracias
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 15:17.