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,