XML: el archivo de análisis devuelve NULL

Ayer pude analizar archivos XML con un programa escrito en C, usando la función doc = xmlParseFile(fname);.

Ahora, devuelve NULL (que queda atrapado en la siguiente línea, devolviendo un error). El programa no ha sido cambiado por más de un mes, los archivos XML no han cambiado desde la semana pasada y libxml2 no ha cambiado desde el 25.3.2012. xmllint se ejecuta a través de los archivos sin problemas, y puedo analizarlos en otra computadora (Solaris, usando el mismo código fuente, pero un compilador y una biblioteca diferentes). Entonces, ¿qué más debo revisar? Suena similar a este hilo, aunque me gustaría evitar esa solución hacky http://ubuntuforums.org/showthread.php?t=1402824 (todavía no lo he probado)

El programa C es en realidad una función mex llamada desde MatLab, pero eso no debería hacer ninguna diferencia, ¿verdad? Estoy ejecutando esto en GNU/Linux.

preguntado el 03 de mayo de 12 a las 12:05

Debería dejar más claro qué biblioteca xml está utilizando. -

Está en un clúster, por lo que no tengo derechos de administrador, pero el nombre es /usr/lib64/libxml2.so.2.7.6 (o libxml2.a o libxml2.la). Es una máquina de 64 bits, de ahí la lib64. Eso responde tu pregunta? -

¿Ha compilado y vinculado las bibliotecas de 64 bits apropiadas? (libc, libm, etc.) -

Supongo que sí, ya que funcionó hasta hoy. Uso este comando para compilar: matlab_2011b/bin/mex -DDEBUG -I/usr/lib64 -lxml2 my_parse_xml.c hay libc.a y libm.a dentro de /usr/lib64 -

erm... está arreglado ahora, después de probar la sugerencia de Peter sin éxito y luego eliminarla. Gracias por las sugerencias, y perdón por la molestia. Supongo que los administradores estaban jugando con cosas. -

1 Respuestas

prueba esto:

  FILE *f = fopen("~/myxml.log", "a");
  xmlSetGenericErrorFunc(f, NULL);
  doc = xmlParseFile(fname);
  fclose(f);

y mire los resultados en el archivo de registro.

contestado el 03 de mayo de 12 a las 13:05

buena idea, pero no pude abrir el archivo. (f==NULL después de la llamada fopen). ¿Alguna idea de por qué? Los permisos fueron 666. - Craq

eso depende de tu sistema operativo. en Windows puede ser "c:\myxml.log". bajo UNIX "~" se expande a su "$HOME", tal vez eso no esté configurado. Puede probar "/home/craq/myxml.log" o dondequiera que resida. - Pedro Miehle

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.