Einzelnen Beitrag anzeigen

Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#1

Unterschiedliche Ergebnisse mit ADOM 5.1 Komponenten

  Alt 29. Jan 2010, 13:10
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.
Alex
  Mit Zitat antworten Zitat