AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Vom IXmlNode zum IXmlDocument

Ein Thema von dpg123 · begonnen am 16. Nov 2017 · letzter Beitrag vom 16. Nov 2017
Antwort Antwort
dpg123

Registriert seit: 13. Apr 2015
19 Beiträge
 
Turbo Delphi für Win32
 
#1

Vom IXmlNode zum IXmlDocument

  Alt 16. Nov 2017, 16:25
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;
  Mit Zitat antworten Zitat
dpg123

Registriert seit: 13. Apr 2015
19 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Vom IXmlNode zum IXmlDocument

  Alt 16. Nov 2017, 17:45
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;
  Mit Zitat antworten Zitat
dpg123

Registriert seit: 13. Apr 2015
19 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Vom IXmlNode zum IXmlDocument

  Alt 16. Nov 2017, 18:42
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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf