MSXML: повисает при использовании DOCTYPE online
От: Alexander Sviridov  
Дата: 26.01.09 07:34
Оценка:
Здравствуйте!

Есть такой 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">

то всё отработает корректено.

Я видел на нескольких форумах (не русскоязычных) описание этой проблемы, но решения нигде не нашёл. Если кто сталкивался, подскажите, пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.