Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML-Datei öffnen (https://www.delphipraxis.net/160347-xml-datei-oeffnen.html)

KahPee 9. Mai 2011 14:00

XML-Datei öffnen
 
Hallo,

ich habe ein Problem beim Öffnen einer XML-Datei. Bisher habe ich immer alles auf Basis des Tutorials von Christopher Harms gemacht. Ich habe eine Prozedur geschrieben die eine XML-Datei nach dem, in dem Tutorial beschriebenen Schema öffnet, Der Rückgabewert gibt an ob die Datei geöffnet werden konnte:
Delphi-Quellcode:
function OpenXMLFile(Filename: string; var xmlDoc: IXMLDOMDocument2): boolean;
begin
  Result:=false;
  xmlDoc:= CoDOMDocument40.Create;
  xmlDoc.setProperty('NewParser', true);
  if not FileExists(FileName) then
    Result:=false
  else
    begin
      xmlDoc.load(FileName);
      if xmlDoc.parseError.errorCode <> 0 then
        begin
          MessageDlg('The XML-File is damaged and could not be opened.'+#13+'('+Filename+')',mtError, [mbOK], 0);
          Result:=false;
        end
      else Result:=true;
    end;
end;
Der Anfang der zu öffnenden Datei sieht so aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "http://www.apple.com/DTDs/PropertyList-1.0.dtd" PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN">
<plist version="1.0">
 <dict>
  <key>Major Version</key>
  <integer>1</integer>
  <key>Minor Version</key>
  <integer>1</integer>
  <key>Application Version</key>
  <string>10.2.1</string>
  <key>Features</key>
  <integer>5</integer>
...
Ich habe mal den parseError.reason abgefangen der besagt folgendes:
Code:
DTD Validation when using the NewParser option or MXXMLWriter to build a DOMDocument is not supported
parseError.line ist "2"

Wo liegt der Fehler?

Vielen Dank im vorraus!

KahPee

himitsu 9. Mai 2011 14:15

AW: XML-Datei öffnen
 
Das steht ja eigentlich schon da.
In der XML ist eine DTD angegeben und aus irgendwelchen Gründen kommt deine gesetzte "NewParser"-Option damit nicht zurecht.

einfache Lösungen wären demnach
- die DTD entfernen
- NewParser nicht zu setzen
- eventuell kann man auch uch die Verwendung/Beachtung der DTD irgendwo abschalten
:gruebel:

KahPee 9. Mai 2011 14:22

AW: XML-Datei öffnen
 
Zitat:

Zitat von himitsu (Beitrag 1099732)
einfache Lösungen wären demnach
- die DTD entfernen

nicht möglich, da ich die Datei nicht erstelle
Zitat:

Zitat von himitsu (Beitrag 1099732)
- NewParser nicht zu setzen

Wenn ich nicht parse erhalte ich einen Fehler "Zugriffsverletzung" bei:
Delphi-Quellcode:
showmessage(xmlDoc.DocumentElement.nodeName);

d.h. es lässt sich mit der Datei im weiteren Verlauf nicht mehr Arbeiten. Gibt es eventuell andere Möglichkeiten eine solche XML-Datei zu verarbeiten?

KahPee

shmia 9. Mai 2011 16:37

AW: XML-Datei öffnen
 
Man muss immer prüfen, ob DocumentElement <> nil ist.
Auf das Ergebnis von Load() oder parseError.errorCode kann man sich leider nicht verlassen.
Delphi-Quellcode:
if not Assigned(xmlDoc.DocumentElement) then
  raise Exception.CreateFmt('Datei %s konnte nicht geladen werden',[Filename]);

KahPee 9. Mai 2011 17:46

AW: XML-Datei öffnen
 
Aber auch wenn das DocumentElement nicht zugewiesen ist bleibt das Problem bestehen, dass ich die Datei nicht öffnen kann. Die sieht übrigens aus wie oben beschrieben..

KahPee

ConnorMcLeod 10. Mai 2011 06:51

AW: XML-Datei öffnen
 
Versuchs mal mit TJvSimpleXml von den JEDIs. Das heisst *Simple*, weil nur wenig bis nix gecheckt wird. Damit läuft er über alle schlecht formatierten Stellen drüber und Du kannst Dich dann selbst drum kümmern.

Sir Rufo 10. Mai 2011 07:55

AW: XML-Datei öffnen
 
Warum so weit weg? Es gibt hier im Forum doch himXML

ConnorMcLeod 10. Mai 2011 08:11

AW: XML-Datei öffnen
 
Weil ich das eine kenne und damit erfolgreich gearbeitet habe und das andere eine Nullkomma-Versionsnummer hat.

rakekniven 14. Jan 2012 19:46

AW: XML-Datei öffnen
 
Hast Du mittlerweile in Lösung?

Habe hier ein Programm das sich auch an der DTD von Apple in Zeile 2 stört.
Wenn ich sie entferne, dann geht alles. Die XML zu editieren finde ich aber nicht gut.

Nutze TXMLDocument von D2010.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz