AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Welche Komponete nehme ich zur Darstellung von XML-Dateien?
Thema durchsuchen
Ansicht
Themen-Optionen

Welche Komponete nehme ich zur Darstellung von XML-Dateien?

Ein Thema von Bomberbb · begonnen am 30. Jul 2010 · letzter Beitrag vom 22. Okt 2010
Antwort Antwort
Seite 2 von 2     12   
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#11

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

  Alt 30. Jul 2010, 10:43
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.

Geändert von HeZa (30. Jul 2010 um 10:59 Uhr) Grund: ein paar Debug-Variablen und Statements entfernt
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#12

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

  Alt 30. Jul 2010, 11:03
Nun, da müsste ich bei jedem Filter wieder neu die Datei öffnen.

Werde mich jetzt mal an erste Versuche wagen, danke!
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#13

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

  Alt 30. Jul 2010, 11:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#14

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

  Alt 21. Okt 2010, 21:42
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?
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 21. Okt 2010, 21:58
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".
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#16

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

  Alt 22. Okt 2010, 23:20
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
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:03 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