Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2005, 16:56
yconoclasta
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 9 meses
Puntos: 0
Pregunta Editor para XML

Saludos,

Pregunté en el foro de PHP y no me han respondido, espero aquí puedan.
Tengo un archivo xml con la siguiente estructura:

Código HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<noticias>
<noticia titulo="título 1" url="url 1">texto 1</noticia>
<noticia titulo="título 2" url="url 2">texto 2</noticia>
<noticia titulo="título 3" url="url 3">texto 3</noticia>
<noticia titulo="título 4" url="url 4">texto 4</noticia>
<noticia titulo="título 5" url="url 5">texto 5</noticia>
<noticia titulo="título 6" url="url 6">texto 6</noticia>
</noticias> 
Ese archivo lo leo desde un flash y muestro las noticias, aquí el ejemplo:
http://ensemblesys.com/restauracion/

Ahora bien, estoy creando (intentando) un editor para poder ingresar los datos al xml, y a su vez, recuperarlos, esto es lo que llevo (atorado):
http://percepcionunitaria.org/prueba...a_noticias.php

No he conseguido hacer que las noticias se escriban ni se lean de manera adecuada. Mi servidor utiliza php4 así que las instrucciones DOM no funcionan. Comento que sé muy poco de PHP así que esto es un gran dolor de cabeza para mi, he leído el manual de php.net pero no le comprendo bien.

Se me presentan varios problemas:
1. No consigo que los nodos sin datos los deje vacios, por ello de los input vacios.
2. No puedo mostrar un título de encabezado para cada noticia (bloque de título, url y texto) para saber qué noticia se está editando, ejemplo: Esta es la noticia 1, esta es la noticia 2, etc.
3. Tampoco consigo escribir el formulario con el formato que necesita el xml

Solo necesito que se escriban máximo 6 noticias. Y en caso de que no se escriban noticias, no se escriba el nodo.

Pongo el código que tengo:

Código PHP:
<?

// fichero con el cuerpo en xml
$file "noticias.xml";
// Acción que hace cuando encuentra la primera etiqueta de un elemento.
function start_element($parser$name$attribs){
    while(list(
$key,$value)=each($attribs))
      switch (
$key) {
        case 
'titulo':
?>
<p>Titulo: <input type="text" name="titulo" id="titulo" value="<? echo "$value" ?>" /></p>
<?        
        
break;
        case 
'url':
?>
<p>Url: <input type="text" name="url" id="url" value="<? echo "$value" ?>" /></p>
<?        
        
break;
    }
}
// Acción para cuando encuentre el final de una etiqueta de un elemento.
function end_element($parser$name){
    }
// Recuperar un dato.
function character_data($parser$data){
    if (
$data == "") {
        echo 
"";
        }
    else {
?>
<p>Noticia: <input type="text" name="noticia" id="noticia" value="<? echo "$data" ?>" /></p>
<?
    
}
}
$xml_parser xml_parser_create('');
xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDING0);
xml_set_element_handler($xml_parser"start_element""end_element");
xml_set_character_data_handler($xml_parser"character_data");

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); 

?>
Gracias !!