2009-09-30 3 views
5

Я попытался переписать пример JScript в MSDN, чтобы проверить XML на некоторые схемы.Delphi: Недопустимый XML проходит через проверку MSXML

В качестве первой попытки я использовал файлы sl-valid.xml, sl-notValid.xml и sl.xsd, используемые в примере.

Мой код выглядит следующим образом:

procedure BasicValidation(FileName: string); 
var 
    XML: IXMLDOMDocument2; 
begin 
    // Load XML and resolve externals 
    XML := ComsDOMDocument.Create; 
    XML.async := False; 
    XML.validateOnParse := True; 
    XML.resolveExternals := True; 
    XML.setProperty('SelectionLanguage', 'XPath'); 
    XML.setProperty('SelectionNamespaces', 'xmlns:x=''urn:book'''); 
    XML.load(FileName); 
    if XML.parseError.errorCode <> 0 then 
    ShowMessage('Error parsing. Reason: ' + XML.parseError.reason) 
    else 
    ShowMessage('XML validation OK.'); 
end; 

При попытке файла сл-notValid.xml, я все еще получаю 'Проверка XML OK'. Кто-нибудь видел это раньше? В чем принципиальное отличие вышеуказанного кода от примера JScript http://msdn.microsoft.com/en-us/library/ms764717%28VS.85%29.aspx?

ответ

8

попробовать этот

procedure BasicValidation(FileName: string); 
var 
    XML: IXMLDOMDocument2; 
begin 
    XML := CoDOMDocument40.Create; 
    XML.async := False; 
    XML.validateOnParse := True; 
    XML.resolveExternals := True; 
    XML.setProperty('SelectionLanguage', 'XPath'); 
    XML.setProperty('SelectionNamespaces', 'xmlns:x=''urn:book'''); 
    XML.load(FileName); 
    if XML.parseError.errorCode <> 0 then 
    ShowMessage('Error parsing. Reason: ' + XML.parseError.reason) 
    else 
    ShowMessage('XML validation OK.'); 
end; 

Объяснение, необходимо явно вызвать конструктор версии, которая поддерживает для проверки схемы XSD (MSXML> = 4).

До свидания.

+0

Большое спасибо, RRUZ! – conciliator