Здравствуйте!
Есть такой XML файл:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE somedoctype SYSTEM "
http://www.someserver.com/somedoctype.dtd">
<root>
</root>
Синтаксис файла удовлетворяет somedoctype.dtd.
Пробую загрузить его, используя MSXML (пробовал со всеми версиями от 2.6 до 6.0):
//XmlDoc: IXMLDOMDocument2;
XmlDoc.validateOnParse := True;
XmlDoc.resolveExternals := True;
XmlDoc.setProperty('ProhibitDTD', False);
XmlDoc.async := True;
XmlDoc.load(FileName);
while True do
if XmlDoc.readyState = 4 then
begin
if XmlDoc.parseError.errorCode <> 0 then
raise Exception.Create('Error.')
else
Break;
end;
Проблема в том, что XmlDoc.readyState всегда равен 3 — а это состояние загрузки документа (4 — загрузка документа полностью завершена).
Эта проблема возникает только, если в XML файле в DOCTYPE указывается URL. Если загрузить файл "
http://www.someserver.com/somedoctype.dtd" и указать в XML файле его локальную версию:
<!DOCTYPE somedoctype SYSTEM "C:\Somepath\somedoctype.dtd">
то всё отработает корректено.
Я видел на нескольких форумах (не русскоязычных) описание этой проблемы, но решения нигде не нашёл. Если кто сталкивался, подскажите, пожалуйста.