использование Libxml2 и Dtd

Тема в разделе "MS Visual C++", создана пользователем julia_k, 20 ноя 2007.

Статус темы:
Закрыта.
  1. julia_k

    julia_k Гость

    здравствуйте!
    помогите начинающему в следующей задаче:
    имеется xml документ, по нему надо составить dtd файл и осуществить валидацию xml по dtd, использую libxml2.
    если парсерить сам xml документ - ошибок не возникает, а вот с dtd - много проблем
    1. если его открывать как файл, то возращается ошибка - пустой документ
    xmlDtdPtr dtd;
    dtd = xmlParseDTD(NULL,(const xmlChar*)"test.dtd");
    2. если его открывать как ссылку из самого xml, то выдает ошибку no declaration for element....
    xmlDocPtr doc;
    doc = xmlReadFile("test.xml", NULL, 0);
    dtd = xmlGetIntSubset(doc);
    3. если запись dtd определить как строку в памяти, а потом ее направить в парсер, то все работает для маленьких и простых документов
    const char *mem = "<?xml version='1.0' encoding='UTF-8'?> \
    <!ELEMENT ECHO-DOCUMENT (Patient?,ToneAudiograms)> \"
    buf = xmlParserInputBufferCreateStatic (mem, strlen(mem),XML_CHAR_ENCODING_ASCII);
    if (buf == NULL)
    { g_print("Fatal error creating dtd buffer.\n");}
    dtd = xmlIOParseDTD (NULL, buf, XML_CHAR_ENCODING_ASCII);
    if(dtd == NULL)
    { g_print("Dtd parse failed.\n");}
    однако если усложнить документ xml и dtd , то начинают лезть ошибки... проверяют эти файлы в Altova XMLSpy - они правильные, ошибок нет
    кто-нибудь решал подобные задачи? как открыть внешний dtd, а не тянуть его программно? и как избавиться от ошибок, которых вроде нет, но они есть?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей