Ошибка синтаксического анализа с libxml2: ошибка пространства имен - PullRequest
0 голосов
/ 07 мая 2019

У меня проблема с анализом моего xml-файла, это неправильно с libxml, но оно подтверждено владельцем приложения.

Я пытался прочитать RFC в XOP, но, похоже, не связанс моей проблемой.И я не понимаю, как реализовать другие решения в моем коде.

int main(int argc, char **argv) {

   char         *docname;
   xmlDocPtr    doc;
   xmlNodePtr   cur;
   xmlChar      *date;

   if (argc < 2) {
     printf("Commande: %s nom_du_fichier\n", argv[0]);
     return EXIT_FAILURE;
   }


   docname = argv[1];

   doc = xmlParseFile(docname);
   cur = xmlDocGetRootElement(doc);

   cur = cur->xmlChildrenNode;
   while (cur != NULL) {
       if ((!xmlStrcmp(cur->name, (const xmlChar *)"anpr"))) {
         date = xmlGetProp(cur, "date");
         printf("date: %s\n", date);
         xmlFree(date);
       }
       cur = cur->next;
   }
   xmlFreeDoc(doc);
   return EXIT_SUCCESS;
}

Код xml:

<msg><tag date="1556896362471" session="1702"><jpeg><xop:Include href="A"/></jpeg>/msg>

file.xml:1: namespace error : Namespace prefix xop on Include is not defined

Этот тег не имеет смысла, но я не могу удалитькаждый раз вручную.

1 Ответ

1 голос
/ 07 мая 2019

У меня проблема с анализом моего xml-файла, это неправильно с libxml, но оно подтверждено владельцем приложения.

Если XML-файл в точности соответствует вашему запросу, то владелец приложения ошибается. Любой совместимый синтаксический анализатор XML столкнется с фатальной ошибкой при попытке проанализировать этот XML.

Я пытался прочитать RFC в XOP, но, похоже, не связан с моей проблемой.

Вы правы, детали XOP не связаны с этой проблемой более низкого уровня.

Возможно, стоит изучить основы пространств имен XML, чтобы вы могли лучше понять, почему этот XML не является правильно сформированным (в частности, атрибут xmlns). https://www.w3schools.com/xml/xml_namespaces.asp

...