Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/06/2011, 13:37
PercevalCiro
 
Fecha de Ingreso: junio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Consulta DomDocument.

Pongo aca un ejemplo completo... para que entiendas todo lo que me falta...

index.php
Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
    <?php
        include 'manejadorXML.php';


        $boj = new manejadorXML("lolo.xml", true);
        $boj->cargarXML();
        
        $nuevoObjeto = $boj->crearNuevoElemento("cuerpo", "");
        $cancion = $boj->crearNuevoElemento("Cancion","Bailando en la sociedad Rural");
        $fecha = $boj->crearNuevoElemento("Fecha","2001");
        $autor = $boj->crearNuevoElemento("Autor", "Alfredo Casero");

        $array_nodo = array($cancion, $fecha, $autor);
        $nuevoObjeto = $boj->agregarNodos($nuevoObjeto, $array_nodo);
        $boj->agregarElementosAlDocumento($nuevoObjeto);
        $boj->guardarXML();
        ?>
    </body>
</html> 


manejadorXML.php
Código PHP:
class manejadorXML{

// <editor-fold desc="Variables">
/*Contendra los valores para obtener informacion del estado del proceso de apertura y creacion de los archivos.*/
protected $controlInt 0;
/*Contendra la ruta donde se encuentra el archivo XML.*/
protected $ruta;

/*el tipo de version que se utilizara, para manipular los XML, por defaul es 1.0*/
protected $version "1.0";
/*el tipo de encofing que utilizaremos para manipular archivos XML, por default es UTF-8*/
protected $encoding "UTF-8";
/**/
protected $crea false;

/**/
protected $espaciosEnBlanco false;
/**/
protected $formatoDeSalida true;
//</editor-fold>

//<editor-fold desc="Metodos Externos -- Principales.">
/**
 *__construct()
 *
 * Descripcion: La variable $iniciado se pone en cero.
 *
 *@param string $ruta variable que indica que permite abrir el archivo, en el caso de que no se requiera
* su apertura inmediata se podria realizar luego, el  valor por default es = "".
* @param bool $crea el valor esta por defecto en false; lo que afecta es que si el archivo no existe se generara posteriormente
* en caso contrario dara un error.
* @return int Devuelve el resultado de la operacion.
 */
function __construct($ruta ""$crea false){
  
   
$this->controlInt $this->setRuta($ruta);
   
$this->crea $crea;

   return 
$this->controlInt;
}

/**
 *function abrirDocumento()
 *
 * Descripcion: Inicialliza un $domDocument.
 *
 *
 *@return int valor del resultado de la operacion realizada, si devuelve 3 la ruta no fue especificada por lo que
* se creo una instancia de objeto que posteriormente debera ser guardado., o no se encontro el archivo, el 2 es correcto.
 */
public function cargarXML(){
//comprueba que se haya cargado un archivo.
       
if($this->controlInt == 1){
           
$this->documento = new DomDocument();       //Inicializa el objeto DomDocument()
           
$this->configurarXML();
           
$this->documento->load($this->ruta);   //Inicializa segun la ruta otorgada.
           
$this->controlInt 2;                      //Si todo salio como se esperaba.
       
}else{
           
$this->documento = new DomDocument($this->version$this->encoding);
           
$this->controlInt 3;
           
$this->configurarXML();
           }
 
 return 
$this->controlInt;
}

/**
  *function guardarXML()
  *
  * Descripcion:
  *
  *
  *@return   int valor del resultado de la operacion.
  */
public function guardarXML(){
    
$tmp =  $this->documento->saveXML();
    if((
$this->controlInt 2) || ($this->crea == true)){
    
$this->crearArchivo($tmp);
}
    if(
$this->controlInt == 2){
    
$this->crearArchivo($tmp);
    }
unset(
$tmp);
return 
$this->controlInt;
}
//</editor-fold>
//
//<editor-fold desc="Metodos Externos -- Elementos">
/**
 *function crearNuevoElemento()
 *
 * Descripcion: Crea un nuevo elemento
 *
 *
 *@param string $nombre         Oblig.    Nombre del nuevo elemento a generar, sera el que se contendra entre '<>'.
 *@param string $valor          No-Oblig. Lo que contendra el nuevo nodo generado, es decir el texto que contendra.
 *@param string $nombreAtributo No-Oblig. En el caso de desear colocar un atributo al nuevo elemento se debe pasar un nombre
 *@param string $atributo       No-Oblig. Valor default es null, si se quiere dar un valor distinto debe pasarse, un argumento distinto.
 *@return   Nodo devuelve la forma de un nodo, para poderlo manipularlo como tal.
 */
public function crearNuevoElemento($nombre$valor ''$nombreAtributo =''$atributo 'null'){
    
$nuevoElemento $this->documento->createElement($nombre); //crea el nuevo elemento.
       
if($valor!=""){
           
$tmp $this->documento->createTextNode($valor); //Si hay valores distinto de nada, lo genera.
           
$nuevoElemento->appendChild($tmp);
           }
       if(
$nombreAtributo!=""){
           
$nuevoElemento $this->documento->setAttribute($nombreAtributo$atributo); //Si se coloco algun nombre para el atributo,
                                                                                        //se procede a generar el atributo en el elemento.
                              
}
    return 
$nuevoElemento//devuelve un nuevo elemento.
}
/**
 *function agregarNodos()
 *
 * Descripcion: Permite a un nodo de origen agregarle otro nodo, o varios nodos,
* si se pasa un array de nodos se pueden incluiran directamente.
 *
 *
 *@param nodo $elementoOrigen Oblig. Es adonde se incluiran todos los demas nodo, o nodo individual.
* @param nodo[] $nuevolElementos Oblig. Puede pasarse un solo nodo, o varios.
 *@return nodo Todos los elementos juntos.
 */
public function agregarNodos($elementoOrigen$nuevosElementos){
if(
count($nuevosElementos)>1){
foreach(
$nuevosElementos as $nuevoElemento){
$elementoOrigen->appendChild($nuevoElemento);
}
}else{
    
$elementoOrigen->appendChild($nuevosElementos);
}
return 
$elementoOrigen;
}

/**
 *function agregarElementosAlDocumento()
 *
 * Descripcion: Agrega el / los elemento(s) al documento, generado
 *
 *
 *@param nodo $nodos       Oblig. Aquello que se desea agregar al documento.
 */
public function agregarElementosAlDocumento($nodos){
    
$this->documento->appendChild($nodos);
}

//</editor-fold>

// <editor-fold desc="Propiedades">

/**
 *Property setRuta()
 *
 * Descripcion: Setea la variable $ruta, para poder inicializar el archivo posteriormente.
 *
 *
 *@param string $ruta La ubicacion y el nombre del archivo XML al que se desea acceder, o crear.
 *
 *@return int valor del resultado de la operacion realizada, si devuelve 0 es que no se encontro el archivo, el 1 es correcto.
 */
public function setRuta($ruta){
    
$this->ruta $ruta;
//comprueba si el archivo existe.

    
if(file_exists($ruta)){
           
$this->controlInt 1;  //coloca el valor en uno.
                             
}
   
    return 
$this->controlInt;
}
/**
 *Property setVersion()
 *
 * Descripcion: El default es 1.0.
 *
 *
 *@param string $valor Valor de la version a utilizar el default es 1.0
 */
public function setVersion($valor){
    
$this->version $valor;
}
/**
 *Property getVersion()
 *
 * Descripcion: Devuelve el valor de Version que
 * tendra el archivo
 *
  *@return   string numero de la version del XMl.
 */
public function getVersion(){
    return 
$this->version;
}
/**
 *Property setEncoding()
 *
 * Descripcion: Setea el tipo encoding que soportara el
 * archivo en el caso de que se deba crear. El defaul es UTF-8
 *
 *
 *@param string $valor Tipo de codificacion que soportara el archivo XML.
 */
public function setEncoding($valor){
$this->encoding $valor;
}
/**
 *Property getEnconding()
 *
 * Descripcion: Recupera el valor seteado para la formacion de la etiqueta inicial
 * del archivo que habra que generar.
 *
 *
  *@return  string Devuelve el valor de Encoding que tengamos seteado el default es UTF-8.
 */
public function getEncoding(){
  return 
$this->encoding;
    }

/**
  *Propery setESpaciosEnBlanco()
  *
  * Descripcion: modificacion del valor para cuando
 * se haga la configuracion, por default esta en false
  *
  *
  *@param bool $valor valor true o false
  */
public function setEspaciosEnBlanco($valor){
    
$this->espaciosEnBlanco $valor;
}
/**
  *Property setFormatoDeSalida()
  *
  * Descripcion:
  *
  *
  *@param bool $valor valor true o false
  */
public function setFormatoDeSalida($valor){
    
$this->formatoDeSalida $valor;
}
// </editor-fold>

//<editor-fold desc="Metodos Internos">
/**
  *function crearArchivo()
  *
  * Descripcion: Genera un el archivo dependiendo
  *
  *
  *@param <TipoDatos> $<Variable> <Descripcion>
  *@return   <TipoDatos> <Descripcion>
  */
private function crearArchivo($tmp){
 
$this->controlInt 5;
 if(
$this->ruta ==""){
     
$this->ruta ="./xmlTemporal".rand(1,999);
     
$this->controlInt 4;
 }
 
$fp fopen($this->ruta"w");
 
fputs($fp$tmp);
 
fclose($fp);
 unset(
$fp);

    }
/**
*function configurarXML()
*
* Descripcion: Configura el Objeto DomDocument, con aquellos parametros
* que se hayan asignado.
*
*/  
private function configurarXML(){
   
$this->documento->preserveWhiteSpace $this->espaciosEnBlanco;
   
$this->documento->formatOutput $this->formatoDeSalida;
}
//</editor-fold>
}?> 

Me faltaria corregir un par de cosas mas... si tienes alguna sugerencia seria genial!!!....
Muchas Gracias, espero que no parezca mucha molestia,