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.