Frage

Edit:

Der Fehler war in der Tat in der Handhabung; parseError versagt auch am den wirklichen Fehler zeigt; finden Sie unter Folgefrage für diesen Fehler .

Alt Frage:

Irgendwie manchmal unter dem Code generiert eine Ausnahme beim Laden der XML der msxml Einheit in Delphi XE verwenden. Es schlägt fehl, auf Windows XP Professional x86 SP3 mit MSXML6 und Windows 7 Ultimate x64 SP1 MSXML6 verwendet wird.

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;

Dieser Fehler tritt bei der XmlDocument.Load Methode:

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

ich beschnitten, um die XML bis auf die XML wie folgt zu finden.

Dies ist der Hex-Dump der XML-Datei:

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="."/>..

Dies ist der XML:

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

Warum tritt der Fehler auf?

(Die XML lädt völlig in Ordnung in .NET und anderen Umgebungen mit MSXML6 nicht).

- jeroen

War es hilfreich?

Lösung

Wie Sie in sehen SysUtils.pas , dass Fehlermeldung ist derjenige, der gegeben ist, wenn GetLastError Null zurückgibt. Die Dokumentation für IXmlDomDocument.load nicht zu Anruf GetLastError beraten, den Grund zu entdecken für das Scheitern. Der letztFehlerWert für Thread ist wahrscheinlich der Standard-Null-Wert.

Stattdessen untersucht das parseError Wert des Dokumentobjekts. Es wird Ihnen eine IXmlDomParseError Objekt, das Sie, wo und warum das Problem erzählt aufgetreten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top