C++ Builder XE2, TXMLDocument «DTD запрещено»

Когда я пытаюсь прочитать XML-документ (файл eagle) с помощью DTD, я получаю сообщение об ошибке:

Project xx поднял класс исключения EDOMParserError с сообщением «DTD is запрещено'

Заголовок XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">

Если я уберу вторую строку...

<!DOCTYPE eagle SYSTEM "eagle.dtd">

...все работает нормально.

После некоторого поиска в Google кажется, что парсер MSXML имеет опцию, называемую «prohibitDTD», установленную в trueпо умолчанию (в более ранних версиях она была ложной).

Однако кажется невозможным установить для этой опции значение false из класса TXMLDocument. Одним из решений является перекомпиляция библиотеки .pas или самостоятельное создание интерфейса с помощью CoCreateInstance().

Все примеры, которые я видел, написаны в Delphi, и у меня возникли трудности с переносом их в C++ Builder.

Кто-нибудь знает, как читать XML-документ DTD с помощью C++ Builder XE2?

Мой пример кода...

#include <xmldoc.hpp>

_di_IXMLNode XMLObject;

TXMLDocument *XMLDocument = new TXMLDocument(this);
XMLDocument->LoadFromFile(fileName); // <----- Exception EDOMParserError
XMLObject = XMLDocument->DocumentElement;

Спасибо...

6
задан Community 12 June 2019 в 04:35
поделиться