🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7955

Problemas con libxml2

#7955
From: Miguel Angel
Date: Wed, 22 Jan 2003 16:26
182 lines
4885 bytes
Hola a todos,

me pasan unas cosas algo marcianas que no entiendo usando libxml2 
para procesar ficheros xml.

El problema es que me aparecen al procesar un fichero xml nodos
etiquetados como 'text', que no existen en el archivo xml.

Alguna idea? os adjunto un peque�o programa de ejemplo y el fichero
xml procesado. Thanks.

El fichero xml que proceso es este:

<?xml version="1.0" encoding="iso8859-1"?>
<equipos>
  <equipo nombre="Valencia C.F." tactica="4-5-1">
    <jugador nombre="Ca�izares" posicion="P"/>
    <jugador nombre="Fabio" posicion="LI"/>
    <jugador nombre="Ayala" posicion="C"/>
    <jugador nombre="Pelegrino" posicion="C"/>
    <jugador nombre="Curro Torres" posicion="LD"/>
    <jugador nombre="Vicente" posicion="II"/>
    <jugador nombre="Albelda" posicion="MD"/>
    <jugador nombre="Baraja" posicion="MO"/>
    <jugador nombre="Rufete" posicion="ID"/>
    <jugador nombre="Aimar" posicion="MP"/>
    <jugador nombre="Carew" posicion="D"/>
    <jugador nombre="Palop" posicion="P"/>
    <jugador nombre="Djukic" posicion="C"/>
    <jugador nombre="Mista" posicion="MP"/>
    <jugador nombre="Angulo" posicion="PV"/>
    <jugador nombre="Juan Sanchez" posicion="D"/>
  </equipo>

  <equipo nombre="Real Madrid" tactica="4-4-2">
    <jugador nombre="Casillas" posicion="P"/>
    <jugador nombre="Roberto Carlos" posicion="LI"/>
    <jugador nombre="Hierro" posicion="C"/>
    <jugador nombre="Helguera" posicion="C"/>
    <jugador nombre="Michel Salgado" posicion="LD"/>
    <jugador nombre="Solari" posicion="II"/>
    <jugador nombre="Makelele" posicion="MD"/>
    <jugador nombre="Zidane" posicion="MO"/>
    <jugador nombre="Figo" posicion="ID"/>
    <jugador nombre="Raul" posicion="D"/>
    <jugador nombre="Ronaldo" posicion="D"/>
    <jugador nombre="Cesar" posicion="P"/>
    <jugador nombre="Pav�n" posicion="C"/>
    <jugador nombre="Cambiasso" posicion="MD"/>
    <jugador nombre="McManaman" posicion="ID"/>
    <jugador nombre="Morientes" posicion="D"/>
  </equipo>
</equipos>



El codigo que uso es el siguiente:

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

void MostrarRama(xmlNodePtr nodo, int indentacion){
  xmlNodePtr aux = NULL;
  char prefijo[256] = "";
  char atributos[256] = "";
  int i;
  
  if (nodo){ 
    /*-- Generar cadena de indetaci�n --*/
    for (i = 0; i < indentacion; i++){
      prefijo[i] = '-';
    }
    prefijo[i] = '\0';
    
    /*-- Imprimir nodo --*/
    printf("%s%s\n", prefijo, nodo->name);
    aux = nodo->xmlChildrenNode;

    /*-- Imprimir los nodos subordinados--*/
    while (aux){
      MostrarRama(aux, indentacion + 1);
      aux = aux->next;
    }  
  }
}

int main(int argc, char *argv[]){
 xmlDocPtr doc = NULL;
 xmlNodePtr raiz = NULL;
 
 if (argc < 2){
   printf("Uso: %s fichero.xml\n", argv[0]);
 }
 else{
   doc = xmlParseFile(argv[1]);
   if (!doc){
     printf("Imposible parsear el fichero: %s\n", argv[1]);
     return -1;    
   }
   else{
     raiz = xmlDocGetRootElement(doc);
     MostrarRama(raiz, 0);    
   }
 }
}

La salida del programa anterior es la siguiente:

equipos
-text
-equipo
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
-text
-equipo
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
--jugador
--text
-text
Technical Details
Message-ID: <cDzX9.3131$md.270358@news.ono.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!newsfeed.vmunix.org!news1.optus.net.au!optus!snewsf0.syd.ops.aspac.uu.net!news-out.spamkiller.net!propagator2-maxim!news-in.spamkiller.net!newsf01.ono.com!news.ono.com.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,786090c4914de80,start
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-01-22 08:27:00 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!newsfeed.vmunix.org!news1.optus.net.au!optus!snewsf0.syd.ops.aspac.uu.net!news-out.spamkiller.net!propagator2-maxim!news-in.spamkiller.net!newsf01.ono.com!news.ono.com.POSTED!not-for-mail
From: Miguel Angel <rocho08@yahoo.es>
Subject: Problemas con libxml2
Newsgroups: es.comp.os.linux.programacion
Lines: 182
User-Agent: KNode/0.7.1
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8Bit
Message-ID: <cDzX9.3131$md.270358@news.ono.com>
Date: Wed, 22 Jan 2003 16:26:48 GMT
NNTP-Posting-Host: 81.202.32.96
X-Complaints-To: abuse@ono.com
X-Trace: news.ono.com 1043252808 81.202.32.96 (Wed, 22 Jan 2003 17:26:48 MET)
NNTP-Posting-Date: Wed, 22 Jan 2003 17:26:48 MET