Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

problema al escribir nuevos nodos con libxml

Participa en el tema problema al escribir nuevos nodos con libxml en el foro Programación.
Este codigo supuestamente deberia crearme un nuevo nodo llamado titulo y meter dentro taaaitulo, pero ...

Buscar en este tema:
 
  •  
    #1 problema al escribir nuevos nodos con libxml
    Este codigo supuestamente deberia crearme un nuevo nodo llamado titulo y meter dentro taaaitulo, pero al ejecutarlo no hace nada, no me da error pero no me sale nada.
    Si alguien puede decirme donde esta el fallo, un saludo.



    #include <stdio.h>
    #include <stdlib.h>
    #include <libxml/parser.h> /*trabaja con los ficheros xml*/
    #include <libxml/tree.h> /*trabaja con el árbol generado de parsear el xml*/

    xmlDocPtr doc;
    xmlNodePtr cur;
    xmlNodePtr node;

    int main(){
    doc=xmlParseFile("doco.xml"); //argumento doco.xml
    if (!doc) {
    printf("Error al cargar documento XML\n");
    }
    cur=xmlDocGetRootElement(doc);
    //cur = cur->xmlChildrenNode;
    while (cur != NULL) {
    if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
    node = xmlNewChild (cur, NULL, "storyinfo", NULL);
    xmlSetProp (node, "titulo", "taaaitulo");
    xmlFreeDoc(doc);

    }
    }
    cur = cur->next;
    xmlSaveFormatFile (NULL, doc, 1);
    return 0;
    }
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: problema al escribir nuevos nodos con libxml

    Fijate la condición del while y pensá lo que pasa cuando se cumple y cuando no se cumple.
    Me gusta este mensaje
  • #3 Re: problema al escribir nuevos nodos con libxml

    Un saludo y gracias, lo siento el cur = cur->next; debía estar dentro del while y no fuera, pero aun asi no me abre el archivo ni escribe el nuevo nodo ni nada, solo me lo ejecuta y no pasa nada, el codigo despues de ese fallo correjido quedaria asi:
    ¿Que es lo que sigue fallando?
    int main(){
    doc=xmlParseFile("doco.xml"); //argumento doco.xml
    if (!doc) {
    printf("Error al cargar documento XML\n");
    }
    cur=xmlDocGetRootElement(doc);
    node = xmlNewChild (cur, NULL, "storyinfo", NULL);

    while (cur != NULL) {
    if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){

    xmlSetProp (node, "titulo", "taaaitulo");
    xmlFreeDoc(doc);

    }

    cur = cur->next;

    }

    xmlSaveFormatFile (NULL, doc, 1);

    return 0;
    }
    Me gusta este mensaje
  • #4 Re: problema al escribir nuevos nodos con libxml

    ¿Qué hace la función xmlFreeDoc?
    Me gusta este mensaje
  • #5 Re: problema al escribir nuevos nodos con libxml

    Originalmente publicado por pangus Ver mensaje
    ¿Qué hace la función xmlFreeDoc?
    La funcion xmlFreeDoc como se supone que el nombre sugiere toma un puntero a un documento XML y libera la memoria y los recursos asociados a dicho nodo....

    Saludos
    Pablo
    Me gusta este mensaje
  • #6 Re: problema al escribir nuevos nodos con libxml

    Originalmente publicado por ExtrañoInocente Ver mensaje
    La funcion xmlFreeDoc como se supone que el nombre sugiere toma un puntero a un documento XML y libera la memoria y los recursos asociados a dicho nodo....
    Entonces ¿qué hace esa variable (doc) como parámetro de otra función más abajo?
    Me gusta este mensaje
  • #7 Re: problema al escribir nuevos nodos con libxml

    Pangu la variable doc es el documento, yo creo que la funcion a la que te refieres sirve para que todo lo modificado del parseado sea metido de nuevo en un fichero.

    Ya consegui escribir elementos con un nuevo nodo, aqui dejo el codigo por si a alguien le interesa. Un saludo y gracias a los dos por todo.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <libxml/xmlmemory.h>
    #include <libxml/parser.h>

    void parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {

    xmlNewTextChild (cur, NULL, "libreta", keyword); //libreta es el nombre del nuevo nodo
    return;
    }

    xmlDocPtr parseDoc(char *docname, char *keyword) {

    xmlDocPtr doc;
    xmlNodePtr cur;

    doc = xmlParseFile(docname);

    cur = xmlDocGetRootElement(doc);

    cur = cur->xmlChildrenNode;
    while (cur != NULL) {
    if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){ //storyinfo se refiere donde colocara el nuevo nodo.
    parseStory (doc, cur, keyword);
    }

    cur = cur->next;
    }
    return(doc);
    }

    int main() {

    char *docname;
    char *keyword;
    xmlDocPtr doc;

    docname = "doco.xml"; //el fichero xml que parseara
    keyword="hola"; //lo que va a escribir como elemento del nuevo nodo
    doc = parseDoc (docname, keyword);
    if (doc != NULL) {
    xmlSaveFormatFile (docname, doc, 0);
    xmlFreeDoc(doc);
    }

    return (1);
    }
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 6 RESPUESTAS
  • 115 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB