Как проверить XML-файл по DTD-файлу с объектами, загруженными в память - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь найти решение для проверки XML. Я использую libxml2 (код C). Нормальная проверка корректно работает, когда DTD представляет собой физический файл. Напротив, у меня DTD-файл загружен в память в качестве буфера. Буферы памяти были сгенерированы на этапе компиляции из четырех файлов DTD. Существует базовый файл DTD, и каждый следующий файл DTD включает в себя предыдущий файл как объект. Проверка XML для базового файла работает просто отлично, так как у него нет объявленных сущностей. Однако следующий файл включает в себя объект предыдущего файла. Первоначально, когда все четыре файла DTD были подготовлены, предполагалось, что все они будут находиться в одном каталоге, и использовался системный объект. Когда все файлы загружены в память как буферы, эти объекты не могут быть разрешены. Каков будет лучший подход здесь? Я думал заменить сущности, используя API (если есть). Пожалуйста посоветуй. Спасибо.

Дополнительная информация. File1.dtd обычный файл DTD НЕТ сущностей File2.dtd содержит:

<!ENTITY % file1 SYSTEM "File1.dtd">
%file1;

Я портирую с подхода "анализ из файла" на "анализ из буфера". Парсер не понимает "% file1;"

...