DTD を使用して XML ドキュメント (イーグル ファイル) を読み取ろうとすると、次のエラーが表示されます。
プロジェクト xx で例外クラス EDOMParserError が発生し、「DTD は禁止されています」というメッセージが表示されました
XML ヘッダーは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
2行目を外すと…
<!DOCTYPE eagle SYSTEM "eagle.dtd">
...すべて正常に動作します。
グーグル検索の結果、MSXML パーサーには「prohibitDTD」というオプションがデフォルトでtrueに設定されているようです (以前のバージョンでは false でした)。
ただし、TXMLDocument クラスからこのオプションを false に設定することはできないようです。解決策の 1 つは、.pas ライブラリを再コンパイルするか、CoCreateInstance() を使用して独自にインターフェイスを作成することです。
私が見たすべての例は Delphi にあり、これらを C++ Builder に変換するのは困難です。
C++ Builder XE2 で DTD XML ドキュメントを読み取る方法を知っている人はいますか?
私のサンプルコード...
#include <xmldoc.hpp>
_di_IXMLNode XMLObject;
TXMLDocument *XMLDocument = new TXMLDocument(this);
XMLDocument->LoadFromFile(fileName); // <----- Exception EDOMParserError
XMLObject = XMLDocument->DocumentElement;
ありがとうございました...