AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML XMLDocument zur Laufzeit -> Exception
Thema durchsuchen
Ansicht
Themen-Optionen

XMLDocument zur Laufzeit -> Exception

Ein Thema von amigage · begonnen am 21. Mai 2015 · letzter Beitrag vom 22. Mai 2015
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#1

XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 16:12
Hallo,

ich habe ein Problem beim Einlesen vom XML Daten aus einem Stream.
Lege ich die XMLDocument Komponente auf eine Form ("XMLDoc") lassen sich die Inhalte problemlos auslesen:

Delphi-Quellcode:
function LoadWebData(xmlResponse : TMemoryStream) : boolean;
var
  StartItemNode: IXMLNode;
begin
  Result := true;

  try
    XMLDoc.LoadFromStream(xmlResponse);
  except;
    Result := false;
    exit;
  end;
  XMLDoc.Active := True;

  try
    StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('response') ;
  except
  end;
end;
Möchte ich die Funktionalität jedoch auslagern und das XMLDocument zu Laufzeit erzeugen, dann wird beim Abfragen der Struktur eine Exception ausgeworfen.

Delphi-Quellcode:
function LoadWebData(xmlResponse : TMemoryStream) : boolean;
var
  XMLDoc : TXMLDocument;
  StartItemNode: IXMLNode;
begin
  Result := true;

  XMLDoc := TXMLDocument.Create(NIL);
  try
    XMLDoc.DOMVendor := DOMVendors.Find('Omni XML');
    XMLDoc.Options := [doAttrNull,doAutoPrefix,doNamespaceDecl];

    try
      XMLDoc.LoadFromStream(xmlResponse);
    except;
      Result := false;
      exit;
    end;
    XMLDoc.Active := True;

    try
      StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('response') ; // <= Exception
    except
    end;
// ....
  finally
    XMLDoc.Active := false;
    XMLDoc := NIL;
  end;
end;
Was mache ich hier falsch? Habe ich vergessen, eine Eigenschaft zu setzen?

Vielen Dank, für jeden Hinweis.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 16:14
Wurde der Stream auch wieder an den Anfang zurück gesetzt an die stelle an der die XML-Daten kommen. Bei LoadFromStream wird oft an der stelle das lesen begonnen an der gerade der Stream steht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#3

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:11
Hallo,

Du meinst xmlResponse.Position := 0; vor XMLDoc.LoadFromStream?
Nein, das bringt leider auch nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:12
Tipp des Jahrhunderts: Erstelle nie ein TXMLDocument mit Owner = nil.
Dadurch erhält man unter Umständen komische, nicht nachvollziehbare Exceptions.

Im Zweifelsfall erstell dir eine temporäre TComponent-Instanz die du dem constructor von TXMLDocument mitgibst.
Hauptsache nicht nil!

Achja: Du musst das xml Dokument im finally wieder freigeben. Auf nil setzen reicht nicht!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:25
In XMLDoc.ParseOptions ist nichts mit Async aktiv?



Ach ja, entweder
Delphi-Quellcode:
var XMLDoc : TXMLDocument;
XMLDoc.Free;
oder
Delphi-Quellcode:
var XMLDoc : IXMLDocument;
XMLDoc := NIL;
$2B or not $2B
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#6

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:35
Tipp des Jahrhunderts: Erstelle nie ein TXMLDocument mit Owner = nil.
Dadurch erhält man unter Umständen komische, nicht nachvollziehbare Exceptions.

Im Zweifelsfall erstell dir eine temporäre TComponent-Instanz die du dem constructor von TXMLDocument mitgibst.
Hauptsache nicht nil!
Das scheint es in der Tat zu sein. Aber was meinst Du mit "temporäre TComponent-Instanz"?

@himitsu: Danke für die Erklärung des Unterschieds
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:38
Sowas halt (falls du wie gesagt irgendwas anderes rumfliegen hast, dann kannst du das stattdessen auch übergeben und musst keine temporäre Instanz erstellen):

Delphi-Quellcode:
function LoadWebData(xmlResponse : TMemoryStream) : boolean;
var
  XMLDoc : TXMLDocument;
  StartItemNode: IXMLNode;
  dummyComp: TComponent;
begin
  Result := true;
  
  dummyComp := TComponent.Create(nil); // <--
  try
    XMLDoc := TXMLDocument.Create(dummyComp); // <--
    try
      XMLDoc.DOMVendor := DOMVendors.Find('Omni XML');
      XMLDoc.Options := [doAttrNull,doAutoPrefix,doNamespaceDecl];

      try
        XMLDoc.LoadFromStream(xmlResponse);
      except;
        Result := false;
        exit;
      end;
      XMLDoc.Active := True;

      try
        StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('response') ; // <= Exception
      except
      end;
  // ....
    finally
      XMLDoc.Active := false;
      XMLDoc := NIL;
    end;
  finally
    dummyComp.Free;
  end;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#8

AW: XMLDocument zur Laufzeit -> Exception

  Alt 21. Mai 2015, 17:41
Super, besten Dank. Das wars. Man lernt nie aus
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: XMLDocument zur Laufzeit -> Exception

  Alt 22. Mai 2015, 08:10
Könnte man nicht vielleicht doch den leeren 'except' Block entfernen? Das ist ja grauenvoll.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz