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>
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_parser, XML_OPTION_CASE_FOLDING, 0);
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($handle, 4096))
xml_parse($xml_parser, $contents, feof($handle));
fclose($handle);
xml_parser_free($xml_parser);
?>