![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
03/04/2007, 16:56
|
![Avatar de GatorV](http://static.forosdelweb.com/customavatars/avatar138775_9.gif) | $this->role('moderador'); | | Fecha de Ingreso: mayo-2006 Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 8 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", 1 ); $nombre1 = $persona1->createNode( "nombre" ); $nombre1->setData( "Fulanito" );
$persona2 = $xml->createNode( "persona" ); $persona2->setAttribute( "id", 2 ); $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( $name, false ); $this->childs[] = $node; return $node; } /** * appendChild * * DEPRECATED * * @param GeckoXML node * @return GeckoXML node * @access public **/ public function appendChild( GeckoXML $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 ) > 0 ) { foreach( $this->attributes as $aname => $avalue ) { $attrs .= " $aname=\"$avalue\""; } } if( empty( $data ) && ( count( $this->childs ) > 0 ) ) { // 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( $data, true ); } 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 ) ); } } ?> |