Einzelnen Beitrag anzeigen

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