Foros del Web » Programando para Internet » PHP »

Generar XML y recuperar sus nodos, propiedades y contenidos

Estas en el tema de Generar XML y recuperar sus nodos, propiedades y contenidos en el foro de PHP en Foros del Web. Saludos, Hace tiempo publiqué un post previo http://forosdelweb.com/showthread.php?postid=1147644 preguntando cómo escribir un XML. Ahora necesito algo un tanto más complicado y de paso una revisión ...
  #1 (permalink)  
Antiguo 08/08/2005, 17:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Generar XML y recuperar sus nodos, propiedades y contenidos

Saludos,

Hace tiempo publiqué un post previo http://forosdelweb.com/showthread.php?postid=1147644 preguntando cómo escribir un XML. Ahora necesito algo un tanto más complicado y de paso una revisión por si he hecho algo mal.

Tengo el siguiente código:

Código PHP:
<?
// concatenar las noticias
if(isset($_POST['Submit'])) {
$cont="<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<noticias>\n";
if(empty(
$texto1))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo1\" url=\"$liga1\">$texto1</noticia>\n";
}
if(empty(
$texto2))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo2\" url=\"$liga2\">$texto2</noticia>\n";
}
if(empty(
$texto3))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo3\" url=\"$liga3\">$texto3</noticia>\n";
}
if(empty(
$texto4))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo4\" url=\"$liga4\">$texto4</noticia>\n";
}
if(empty(
$texto5))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo5\" url=\"$liga5\">$texto5</noticia>\n";
}
if(empty(
$texto6))
    echo(
"");
    else {
$cont.="<noticia titulo=\"$titulo6\" url=\"$liga6\">$texto6</noticia>\n";
}
$cont.="</noticias>";

$abrir=fopen("noticias.xml""w");
fwrite($abrir$cont);
fclose($abrir);
}

?>

<h1>Escribir noticias</h1>
<form name="form1" id="form1" method="post" action="<?=$_SERVER['PHP_SELF'?>">
  <h2>Noticia 1 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo1" id="titulo1" /></p>
  <p>Liga: <input type="text" name="liga1" id="liga1" /></p>
  <p>Noticia: <textarea name="texto1" id="texto1" rows="3"></textarea></p>
  <h2>Noticia 2 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo2" id="titulo2" /></p>
  <p>Liga: <input type="text" name="liga2" id="liga2" /></p>
  <p>Noticia: <textarea name="texto2" id="texto2" rows="3"></textarea></p>
  <h2>Noticia 3 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo3" id="titulo3" /></p>
  <p>Liga: <input type="text" name="liga3" id="liga3" /></p>
  <p>Noticia: <textarea name="texto3" id="texto3" rows="3"></textarea></p>
  <h2>Noticia 4 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo4" id="titulo4" /></p>
  <p>Liga: <input type="text" name="liga4" id="liga4" /></p>
  <p>Noticia: <textarea name="texto4" id="texto4" rows="3"></textarea></p>
  <h2>Noticia 5 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo5" id="titulo5" /></p>
  <p>Liga: <input type="text" name="liga5" id="liga5" /></p>
  <p>Noticia: <textarea name="texto5" id="texto5" rows="3"></textarea></p>
  <h2>Noticia 6 </h2>
  <p>T&iacute;tulo: <input type="text" name="titulo6" id="titulo6" /></p>
  <p>Liga: <input type="text" name="liga6" id="liga6" /></p>
  <p>Noticia: <textarea name="texto6" id="texto6" rows="3"></textarea></p>
  <p><input type="submit" name="Submit" value="Agregar noticias" />
  </p>
</form>
La intención es que se puedan publicar las noticias, eso ya lo hace. Pero he visto si por ejemplo se escriben las noticias 1, 2 y 3 y después de algunos días se desea dejar esas mismas noticias y publicar la 4 y 5 habrá un problema ya que se borrarán las anteriores y solo se escribiran las nuevas. Se me ocurre que la opción para evitar lo anterior es recuperar los datos escritos en el xml y rellenar las respectivas casillas input con esos valores, el problema es que no sé cómo hacerlo. Estuve viendo que la instruccion para leer el xml es xml_parse pero sinceramente no le comprendo bien.

Gracias.

Última edición por yconoclasta; 08/08/2005 a las 17:51
  #2 (permalink)  
Antiguo 08/08/2005, 17:17
 
Fecha de Ingreso: julio-2005
Mensajes: 275
Antigüedad: 18 años, 9 meses
Puntos: 3
Hola, pues nose, yo lo que hago es meter todo el contenido del XML en un string menos el cierre del documento, y luego lo concateno con las noticias nuevas y lo cierro. Y lo vuelvo a guardar todo en el archivo.
  #3 (permalink)  
Antiguo 09/08/2005, 17:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
No te entendí Kitune, ¿podrias poner un ejemplo?
  #4 (permalink)  
Antiguo 10/08/2005, 16:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Avancé pero no tengo el resultado deseado

Buscando en el mismo foro entontré mucha información útil.
Implemento el siguiente código para recoger los datos del XML creado:

Código PHP:
$file "noticias.xml";
// Acción que hace cuando encuentra la primera etiqueta de un elemento.
function start_element_handler($parser$name$attribs){
    echo 
"Elemento Ini: ".$name."<BR>";
    echo 
"Atributos: <br>";
    while(list(
$key,$value)=each($attribs))
        echo 
"Key= ".$key." Value= ".$value."<br>";
    }
// Acción para cuando encuentre el final de una etiqueta de un elemento.
function end_element_handler($parser$name){
    echo 
"Elemento Fin: ".$name."<BR>";
    }
// Recuperar un dato.
function character_data_handler($parser$data){
    echo 
"<BR>Dato: <B>".$data."</b><BR>";
    }

$xml_parser xml_parser_create('');
xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDING0);
xml_set_element_handler($xml_parser"start_element_handler""end_element_handler");
xml_set_character_data_handler($xml_parser"character_data_handler");

if(!
file_exists($file))
die(
"\n<p>\"$file\" does not exist.</p>\n</body>\n</html>");

if(!(
$handle fopen($file"r")))
die(
"<p>Cannot open \"$file\".</p>\n</body>\n</html>");

while(
$contents fread($handle4096))
xml_parse($xml_parser$contentsfeof($handle));

fclose($handle);

xml_parser_free($xml_parser); 
Pero obviamente eso solo devuelve los valores en cadena del archivo, y lo que yo necesito es que los valores de los nodos y atributos aparezcan en casillas de texto para poder ser editados. No se me ocurre cómo retomar el valor de cada nodo y atributo e incluirlo en un form para poder publicarse.

Agradezco su ayuda.
  #5 (permalink)  
Antiguo 10/08/2005, 17:29
 
Fecha de Ingreso: julio-2005
Mensajes: 275
Antigüedad: 18 años, 9 meses
Puntos: 3
No entiendo muy bien lo que quieres hacer. Quieres mostrar el archivo XML en forma de campos de texto y que puedan ser editados por ejemplo un nodo de aqui, otro de m as abajo, etc y que luego se actualice el XML??

O solo ir añadiendo nuevos nodos al final del archivo XML con nuevas noticias o lo que sea?

un saludo.
  #6 (permalink)  
Antiguo 10/08/2005, 17:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias por responder !!!

Quiero mostrar cada uno de los nodos con sus respectivos atributos y datos contenidos.

La cosa es así:
El archivo XML se genera desde el form, ese archivo lo lee un flash y muestra las noticias. Luego lo que deseo es volver a leer el xml desde form pero que los valores ya escritos los retome ordenadamente para poder editarlos, ya que sino, al abrir el form e introducir nuevos datos los datos anteriores se perderan.

Me explico? Quizá lo que quiero se resume en hacer un editor WYSIWYG que recupere los registros y que escriba un archivo xml en lugar de guardar en base de datos.

Pongo una muestra de lo ya hecho, el form:
http://percepcionunitaria.org/prueba...a_noticias.php

y el xml que genera:
http://percepcionunitaria.org/pruebas/noticias.xml

saludos
  #7 (permalink)  
Antiguo 10/08/2005, 18:23
 
Fecha de Ingreso: julio-2005
Mensajes: 275
Antigüedad: 18 años, 9 meses
Puntos: 3
te parece bien que hablemos por messenger? yo tambien estoy haciendo algo parecido con noticias en xml y a ver si sacamos algo en concreto. [email protected]
  #8 (permalink)  
Antiguo 10/08/2005, 20:19
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Sale, ya te agregué. [email protected]
Te aviso que no sé casi nada de PHP. Por ello que pida ayuda. La programación no es mi fuerte pero le investigo.

Otra alternativa que me propusieron es grabar los datos directamente a una base de datos y luego de la base grabar al xml que lee flash, pero se me hace un puentesote. Si no hay de otra acabaré implementando eso, al fin y al cabo que es más sencillo escribir y leer de una base de datos.
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.