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/)
-   -   Welche Komponete nehme ich zur Darstellung von XML-Dateien? (https://www.delphipraxis.net/153363-welche-komponete-nehme-ich-zur-darstellung-von-xml-dateien.html)

Bomberbb 30. Jul 2010 07:46

Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Hallo,

Ich möchte verschiedene Datensätze aus einer XML-Datei in einer Tabelle anzeigen. Da ich bis jetzt noch nie etwas mit Datenbankkomponenten zu tun hatte, die Frage, welche Komponente die beste für meine Zwecke ist.
Ich muss die Datensätze nur Abfragen, Sie nach Spalten sortieren und Filtern können.

Hab das bei anderen Zwecken immer mit Stringgrid gemacht, aber ich dachte mir evtl kann man z.B. auch ein DBGrid benutzen. Was ist Eure Meinung?

Gruß

BBB

franktron 30. Jul 2010 08:09

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Das hängt ganz davon ab wie du die XML einlesen willst.

Wenn du die mit einem XML Parser lesen willst dann kannst du gar keine DBGrid nehmen weil die eine Datasource benötigt.

mkinzler 30. Jul 2010 08:12

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Und auch auf den Aufbau der Datei ( Grid, Tree, ...)

Bomberbb 30. Jul 2010 08:42

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Ja, die Struktur der Datei ist so, dass ich sie manuell einlesen muss.

Ich denke mir, dass das Filtern und sortieren mit Datenbankkomponenten einfachen ist. Zumal bekomme ich so ja nun auch ein weing Erfahrung mit sochen Komponenten.

Hab noch ein wenig gegoogelt... evtl ist ja das der richtige Weg:

XML per parser einlesen und die gewünschten Daten in ein TTable einlesen. Dann via TDataSource in das DBGrid einbinden...?

mkinzler 30. Jul 2010 08:45

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Kommt, wie gesagt auf die Struktur an. Eien Baumstruktur lässt sich besser in einem TreeView o.ä. visualisieren.

Bomberbb 30. Jul 2010 09:03

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Ja, ich muss selbst aus der Baumstruktur die Datensätze auswählen, die ich anzeigen will... Aber der Weg oben, wäre der soweit sinnvoll?

franktron 30. Jul 2010 09:12

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Zitat:

Zitat von Bomberbb (Beitrag 1038551)
Ja, ich muss selbst aus der Baumstruktur die Datensätze auswählen, die ich anzeigen will... Aber der Weg oben, wäre der soweit sinnvoll?


Du kannst die Daten in einen MemTable packen TTable würde ich NICHT mehr benutzen da es die BDE benötigt.

MemTable gibt es mehrere such mal hier im Forum

himitsu 30. Jul 2010 09:14

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Zitat:

Zitat von franktron (Beitrag 1038539)
dann kannst du gar keine DBGrid nehmen weil die eine Datasource benötigt.

Och, das muß man halt die Daten der XML auf eine Datasource übertragen.

Bomberbb 30. Jul 2010 09:30

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Mit einer Datasource muss ich doch eh arbeiten, wenn ich die Daten filtern will...?

mkinzler 30. Jul 2010 09:42

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Man könnte auch beim Einlesen im Parser filtern

HeZa 30. Jul 2010 09:43

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Zitat:

Zitat von Bomberbb (Beitrag 1038530)
Ich möchte verschiedene Datensätze aus einer XML-Datei in einer Tabelle anzeigen. Da ich bis jetzt noch nie etwas mit Datenbankkomponenten zu tun hatte, die Frage, welche Komponente die beste für meine Zwecke ist.

Wir müssen öfters XML-Daten in eine Datenbank-Importieren. Dabei gehen wir meistens so vor, dass wir eine XSL-Transformationsdatei schreiben, die die orginal XML-Daten in ein TClientDataSet kompatibles Format wandeln. Anschließend lesen wir die transformierte XML-Datei mit einem TClientDataset ein.

(den folgenden Source habe ich leicht verändert aus einem bestehenden Projekt kopiert. Eventuelle Syntax-Fehler sind für Dich)

Delphi-Quellcode:
function ImportXML(const xmlFileName, xslFileName: String; var errorMsg: String): Boolean;
var
  inputXML: IXMLDOMDocument;
  transormationXSL: IXMLDOMDocument;
  locData: TClientDataset;
begin
  Result := True;

  locData := TClientDataset.Create(nil);
  try
    try
      inputXML := coDOMDocument60.Create;
      inputXML.async := False;
      inputXML.validateOnParse := False;

      transormationXSL := coDOMDocument60.Create;
      transormationXSL.async := False;
      transormationXSL.validateOnParse := False;

      if not inputXML.load(xmlFileName) then
        raise Exception.CreateFmt('%s', [inputXML.parseError.reason]);

      if not transormationXSL.load(xslFileName) then
        raise Exception.CreateFmt('%s, XSL-File: %s', [transormationXSL.parseError.reason, xslFileName]);

      locData.XMLData := inputXML.transformNode(transormationXSL);
      locData.Open;

      while not locData.EOF do
        begin
        // Do The Import here
        // Do Commit here if you want to commit every single record
        locData.Next;
        end;

      // Do Commit here if you want to commit the whole import or nothing
    finally
      locData.Free;
    end;

  except
    on e: Exception do
      begin
      errorMsg := e.Message;
      //DB.Rollback;
      Result := False;
      end
  end;
end;
für die DOM-Objekte musst du die MSXML-Typbibliothek importieren. Um das Format des ClientDataset zu erhalten erstellst du die gewünschte Struktur und speicherst sie im XML Format. Dann musst Du dich noch ein bisschen in XSL-Transformation einlesen.

Bomberbb 30. Jul 2010 10:03

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Nun, da müsste ich bei jedem Filter wieder neu die Datei öffnen.

Werde mich jetzt mal an erste Versuche wagen, danke!

HeZa 30. Jul 2010 10:37

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Zitat:

Zitat von Bomberbb (Beitrag 1038571)
Nun, da müsste ich bei jedem Filter wieder neu die Datei öffnen.

Wenn du das jetzt auf die XSL-Transformation beziehst, ist das nicht richtig. Du könntest einmal alle Datensätze in das ClientDataset laden und dann mit der Filter-Eigenschaft des ClientDataset filtern. Wenn ohne Filtern die Datenmenge zu groß ist, ist das natürlich keine Option.

mschaefer 21. Okt 2010 20:42

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Kann man die Microsoft xml Implementierung auch dazu bewegen die xml-datei mit ordentlichem Zeilenumbruch zu schreiben, sodass man diese auch mit einem Texteditor wie Notepad anschauen kann?

himitsu 21. Okt 2010 20:58

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Zitat:

Zitat von mschaefer (Beitrag 1057052)
Kann man die Microsoft xml Implementierung auch dazu bewegen die xml-datei mit ordentlichem Zeilenumbruch zu schreiben, sodass man diese auch mit einem Texteditor wie Notepad anschauen kann?

Ja, aber je nach verwendetem Interface versteckt es sich woanders.

Beim TXMLDocument steckt dieses in den .Options unter irgendwas mit "Ident".

mschaefer 22. Okt 2010 22:20

AW: Welche Komponete nehme ich zur Darstellung von XML-Dateien?
 
Hallo Himitsu,

Danke für den 'Tip'. Nach dem Ding hätte ich bestimmt noch ein Jahr suchen können.
Na und wenn in 5 Jahren der Delphi-Mac-Compiler kommt, kann ich das dann ehedem auf
Dein XML umstellen.

Grüße aus Hannover

Martin


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