Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Vom IXmlNode zum IXmlDocument (https://www.delphipraxis.net/194406-vom-ixmlnode-zum-ixmldocument.html)

dpg123 16. Nov 2017 16:25

Vom IXmlNode zum IXmlDocument
 
Liebes Forum,

ich muss pro Datensatz aus einer csv-Quelle eine xml-Datei erstellen und gegen ein xsd-Schema validieren.

Dazu hab ich erstmal mit dem xml-Datenbindung-Wizard aus der xsd-Datei die entsprechenden Interfaces und Klassen erzeugen lassen. Die eigentliche Datenbefüllung sollte damit kein Problem mehr sein, aber was ist der sauberste / schönste / best practice Weg diesen befüllten Nachfahren des IXmlNodes per IXmlDocument in eine xml-Datei zu schreiben? Oder ist diese Grundidee schon falsch?

Was ich bisher habe (weitere Fragen im Code):

Delphi-Quellcode:
procedure TForm1.btnParseClick(Sender: TObject);

var

 lMyDaten: IXmlMyDaten; // Vom Wizard erstellter Root Node

 lXmlDoc: IXMLDocument;

begin


  lMyDaten := NewMyDaten; // Vom Wizard erstellte Funktion


  lMyDaten.NName := 'Mustermann'; //Beispiel Daten

  lMyDaten.VName := 'Max';


  lXmlDoc := NewXMLDocument('1.0'); // neues xml-Dokument initialisieren

  lXmlDoc.StandAlone := 'yes';

  lXmlDoc.Encoding := 'UTF-8';

  // dies hier ist denke ich nicht im Sinne des Erfinders
  // es kommt kein "gültiger" xml header raus
  // wie ist ein Übertragen möglich ohne per Schleife alle Childs zu durchlaufen? 
  lXmlDoc.XML.Text := FormatXMLData(lMyDaten.XML);


  // was muss ich der xml-Datei mitteilen, dass hier die Validierung ausgelöst wird?
  lXmlDoc.Active := True;

  lXmlDoc.SaveToFile('MyDatenMuster.xml');


  lXmlDoc := nil;

  lMyDaten := nil;


end;

dpg123 16. Nov 2017 17:45

AW: Vom IXmlNode zum IXmlDocument
 
Ok, ich denke ich bin ein Schritt weiter:

Delphi-Quellcode:
procedure TForm1.btnParseClick(Sender: TObject);

var

 lMyDaten: IXmlMyDaten; // Vom Wizard erstellter Root Node

 lXmlDoc: IXMLDocument;

begin


  lXmlDoc := NewXMLDocument('1.0'); // neues xml-Dokument initialisieren

  lXmlDoc.StandAlone := 'yes';

  lXmlDoc.Encoding := 'UTF-8';

// einkommentiert wird kein Node NName gefunden. Find ich merkwürdig.
//  lXmlDoc.Options := [doNodeAutoIndent];


// das sieht schon deutlich mehr danach aus, als ob es so gedacht ist
  lMyDaten:= GetMyDaten(lXmlDoc); // Vom Wizard erstellte Funktion

 
  lMyDaten.NName := 'Mustermann'; //Beispiel Daten

  lMyDaten.VName := 'Max';


  // was muss ich der xml-Datei mitteilen, dass hier die Validierung ausgelöst wird?
  lXmlDoc.Active := True;

  lXmlDoc.SaveToFile('MyDatenMuster.xml');


  lXmlDoc := nil;

  lMyDaten := nil;


end;

dpg123 16. Nov 2017 18:42

AW: Vom IXmlNode zum IXmlDocument
 
Denke noch besser:

Delphi-Quellcode:
procedure TForm1.btnParseClick(Sender: TObject);

var

 lMyDaten: IXmlMyDaten; // Vom Wizard erstellter Root Node

 lXmlDoc: IXMLDocument;

begin


  lMyDaten:= NewMyDaten; // Vom Wizard erstellte Funktion

  lXmlDoc := lMyDaten.OwnerDocument;


  lXmlDoc.Version := '1.0';

  lXmlDoc.StandAlone := 'yes';

  lXmlDoc.Encoding := 'UTF-8';

// einkommentiert wird kein Node NName gefunden. Find ich merkwürdig.
//  lXmlDoc.Options := [doNodeAutoIndent];

 
  lMyDaten.NName := 'Mustermann'; //Beispiel Daten

  lMyDaten.VName := 'Max';


  // was muss ich der xml-Datei mitteilen, dass hier die Validierung ausgelöst wird?
  lXmlDoc.Active := True;

  lXmlDoc.SaveToFile('MyDatenMuster.xml');


  lXmlDoc := nil;

  lMyDaten := nil;


end;


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