1

編集:

エラーは確かに処理にありました。parseErrorまた、失敗すると、実際のエラーが明らかになります。そのエラーについては、フォローアップの質問を参照してください。

古い質問:

どういうわけか、Delphi XEでmsxmlユニットを使用してXMLをロードすると、以下のコードで例外が生成されることがあります。MSXML6を使用するWindowsXPProfessionalx86SP3およびMSXML6を使用するWindows7Ultimatex64SP1では失敗します。

procedure TXMLEOSErrorTestCase.Test;
var
  XmlDocument: IXMLDOMDocument3;
  XmlFileName: string;
begin
  XmlDocument := CoFreeThreadedDOMDocument60.Create();
  XmlFileName :=  TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '1-Normal.xml');
  if not XmlDocument.load(XmlFileName) then
    RaiseLastOSError();
end;

このエラーは、XmlDocument.loadメソッド中に発生します。

EOSError at  $00423B2D
A call to an OS function failed

XMLを以下のXMLにトリミングしました。

これは、XMLファイルの16進ダンプです。

000000: 3C 3F 78 6D 6C 20 76 65  72 73 69 6F 6E 20 3D 20 <?xml version =
000010: 22 31 2E 30 22 20 65 6E  63 6F 64 69 6E 67 3D 22 "1.0" encoding="
000020: 57 69 6E 64 6F 77 73 2D  31 32 35 32 22 3F 3E 3C Windows-1252"?><
000030: 52 4F 57 20 43 69 74 79  3D 22 E0 22 2F 3E 0D 0A ROW City="."/>..

これはXMLです:

<?xml version = "1.0" encoding="Windows-1252"?><ROW City="à"/>

エラーが発生するのはなぜですか?

(XMLは、MSXML6を使用しない.NETおよびその他の環境で完全に正常にロードされます)。

--jeroen

4

1 に答える 1

6

SysUtils.pasでわかるように、そのエラーメッセージは、GetLastErrorゼロを返したときに表示されるメッセージです。のドキュメントでIXmlDomDocument.loadGetLastErrorは、失敗の理由を見つけるために電話することをお勧めしていません。スレッドのlast-error値は、おそらくデフォルトのゼロ値です。

代わりに、ドキュメントオブジェクトのparseError値を調べてください。IXmlDomParseError問題が発生した場所と理由を示すオブジェクトが表示されます。

于 2010-12-03T04:32:23.147 に答える