Ver Mensaje Individual
  #11 (permalink)  
Antiguo 12/05/2011, 15:42
Avatar de Ale_VH
Ale_VH
 
Fecha de Ingreso: abril-2011
Ubicación: Barcelona
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: XML con CDATA en PHP no funciona!!!

Buenísimo!!! al final funcionó todo pipicucu, la cosa quedó así:
el código para crear el archivo xml:

if(isset($_POST['crear'])){
$usu=$_SESSION["usuario"];
$nom=$_POST["nombretema"];
$con=$_POST["contenido"];

$archivotema = new DOMDocument("1.0", "UTF-8");//crea el temporal de xml sin nombre ni na'a

$nuevo = $archivotema->createElement("tema");//crea el root del xml
$nuevo = $archivotema->appendChild($nuevo);//agrega el root al archivo temporal de xml
$nuevocomentario = $archivotema->createElement("comentario");//crea un contenedor para toda la información del comentario, usuario, nombre del tema y contenido
// Creo el atributo
$atributo = $archivotema->createAttribute("valor");
// Se lo acoplo al elemento "contactos"
$nuevocomentario->appendChild($atributo);
// Creo el texto
$atributo_valor = $archivotema->createTextNode("Principal");
// Se lo asigno al atributo
$atributo->appendChild($atributo_valor);
$nuevousuario = $archivotema->createElement("usuario", $usu);//crea el elemento usuario con su informacion
$nuevonombretema = $archivotema->createElement("nombretema", $nom);//crea el elemento nombretema con su informacion
$nuevocontenido = $archivotema->createElement("contenido");//crea el elemento contenido
$cdata = $archivotema->createCDATASection(utf8_encode($con));//crea una seccion de CDATA con su informacion, es decir, el contenido del tema
$nuevocontenido->appendChild($cdata);//agrega la seccion de CDATA al elemento "contenido"

//lo que sigue es el ensamble de los elementos principales
$nuevocomentario->appendChild($nuevousuario);//agrega el elemento ususario al elemento "comentario"
$nuevocomentario->appendChild($nuevonombretema);//agrega el elemento nombretema al elemento "comentario"
$nuevocomentario->appendChild($nuevocontenido);//agrega el elemento contenido al elemento "comentario"
$nuevo->appendChild($nuevocomentario);//agrega el elemento comentario al root del xml
$archivotema->save("temas/".$nom.".xml");//guarda el archivo creado con los cambios realizados

y el código para ver el tema creado y agregarle de quererlo, un comentario:

foreach($tema as $com){
$comentario = $com->getElementsByTagName("comentario");
if($comentario->item(0)->hasAttribute("valor")){
$nombreprincipal = $archivo->getElementsByTagName("nombretema");
$_SESSION["nombretema"] = $nombreprincipal->item(0)->nodeValue;
}
foreach($comentario as $ele){
$usuario = $ele->getElementsByTagName("usuario");
$nombretema = $ele->getElementsByTagName("nombretema");
$contenido = $ele->getElementsByTagName("contenido");
$utf8contenido = utf8_decode($contenido->item(0)->nodeValue);

echo "Usuario:<strong> ".$usuario->item(0)->nodeValue."</strong><br/><br/>";
echo "Nombre del Tema:<strong> ".$nombretema->item(0)->nodeValue."</strong><br/><br/>";
echo "Contenido:<br/>".$utf8contenido. "<br/><br/>";
}
}
if(isset($_SESSION["usuario"])){
?>
<form action="visualizartema.php" method="post">
Usuario:<br />
<?php echo $_SESSION["usuario"]; ?><br />
Comentario:<br />
<textarea name="contenido" style="resize:none; width:21em; height:10em">Escriba lo que desee aquí</textarea><br /><br />
<input type="submit" name="agregar" value="Agregar Comentario"/>
</form>

<?php
if(isset($_POST["agregar"])){
$usu=$_SESSION["usuario"];
$con=$_POST["contenido"];
$guardar="temas/".$_SESSION['archivovisualizar'];
/*no creo de nuevo el DOMdocument porque sino hace quilombo con el anterior, como son el mismo archivo...,
esto me plantea una duda, se puede cerrar el archivo que abrí antes o eso se hace solo cuando se cierra
el navegador???*/
$nuevocomentario=$archivo->createElement("comentario");
$nuevocontenido=$archivo->createElement("contenido");
$cdata=$archivo->createCDATASection(utf8_encode($con));
$nuevousuario=$archivo->createElement("usuario", $usu);
$nuevonombretema=$archivo->createElement("nombretema", "Respuesta: ".$_SESSION['nombretema']);

$cdata=$nuevocontenido->appendChild($cdata);
$nuevousuario=$nuevocomentario->appendChild($nuevousuario);
$nuevonombretema=$nuevocomentario->appendChild($nuevonombretema);
$nuevocontenido=$nuevocomentario->appendChild($nuevocontenido);
$nuevocomentario=$archivo->firstChild->appendChild($nuevocomentario);//el error esta aca, cómo hago para decirle que no se carge a su hermano y a su padre (porque tambien se carga el root "tema")???
$archivo->save($guardar);

unset ($_SESSION['nombretema']);

Muchas gracias gente!!! la verdad es que salió todo bárbaro!!! espero poder ayudar yo en un futuro. gracias de nuevo!