Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Unterschiedliche Ergebnisse mit ADOM 5.1 Komponenten (https://www.delphipraxis.net/146922-unterschiedliche-ergebnisse-mit-adom-5-1-komponenten.html)

Lord_Stifterl 29. Jan 2010 13:10


Unterschiedliche Ergebnisse mit ADOM 5.1 Komponenten
 
Hallo alle zusammen,

ich arbeite in letzter Zeit sehr intensiv mit XML. Ich verwende dazu OpenXML und die VirtualTreeView in meinen Projekten. Nun kam mir die Idee, ich bau mir ein OpenXMLTree. Ich habe meine Komponente also von TCustomVirtualStringTree abgeleitet und habe die ADOM-Komponenten TDOMImplementation, TXmlToDOMParser und ein TDOMDocument in den Private-Abschnitt eingefügt.

Delphi-Quellcode:
  TOpenXMLTree = class(TCustomVirtualStringTree)
  private
    { Private declarations }
    FXMLDoc   : TDomDocument;
    FXTDParser : TXmlToDomParser;
    FDomImpl  : TDomImplementation;
    ...
Beim Create der Komponente erstelle ich FDomImpl und FXTDParser und setze die Defaultvalues, welche normalerweise über den Objektinspektor gesetzt werden.

Delphi-Quellcode:
constructor TOpenXMLTree.Create(AOwner: TComponent);
begin
  inherited Create (AOwner);
  SetupXMLTree;

  if not (assigned (FDomImpl)) then
    FDomImpl := TDomImplementation.Create(AOwner);

  if not (assigned (FXTDParser)) then begin
    FXTDParser := TXmlToDomParser.Create(Parent);
   
    FXTDParser.DOMImpl              := FDomImpl;
    FXTDParser.BufferSize           := 4096;
    FXTDParser.KeepCDATASections    := True;
    FXTDParser.KeepComments         := True;
    FXTDParser.KeepEntityRefs       := True;
    FXTDParser.ErrorReportingEnabled := True;
  end;
end;
Beim Aufruf der LoadXML Routine wird zuerst geparst (Result ist ein TDomDocument) und anschließend sollte die Struktur aufgebaut in die Nodes in der VirtualTreeView angezeigt werden.

Delphi-Quellcode:
procedure TOpenXMLTree.LoadXML(Filename: String);
begin
  FXMLDoc := FXTDParser.ParseFile (Filename, True);
  LoadDocumentStructure;
end;
Mein Problem ist, dass dies leider so nicht funktioniert. Wenn ich den Code debugge, sehe ich, dass das XML-Dokument angeblich keine ChildNodes hat (assigned ja, aber Length = 0).

Klatsche ich die DomImplementation und den Parser auf ein Form und übergeben statt dem Filename in der LoadXML-Routine das bereits fertig geparste XML-Dokument, sind plötzlich ChildNodes vorhanden.

Wäre toll wenn mir jedmand auf die Sprünge helfen kann und mir sagt warum das nicht klappt. Grundsätzlich wäre zu sagen, dass ist meine erste Eigenbaukomponente. Sollte ich also irgendwelche grundlegenden Sachen vergessen haben, bitte mich darauf hinzuweisen.

Danke
Alex

PS: Ich weiß, es gibt bereit eine XMLTree-Komponente, diese basiert aber auf der MSXML_TLB.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 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