TBeXMLWriter
TBeXMLWriter
Klasse zur Generierung einer XML-Datei bzw. XML-Daten. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".
Eigenschaften
Allgemeine-Eigenschaften
FileName:CDatei-Name der XML-Datei
Schema:C Datei-Name zur XML-Schema-Datei
Encoding:CCodierung der XML-Datei (default = "UTF-8")
Standalone:CAngabe, ob es externe Deklarationen gibt. Mögliche Werte 'yes' / 'no'. Default = 'no'. Groß-Kleinschreibung beachten!
Indent:NAnzahl Leerzeichen zu hierarchischen Einrückung der XML-Ausgabe (default = 1)
WriteXMLStartElement:LTrue (default) = Am Anfang der XML-Datei wird das XML-Start-Element mit Codierung usw. eingefügt.
Active:LTrue = XML-Datei zum Schreiben öffnen bzw. ist geöffnetFalse = XML-Datei schließen bzw. ist geschlossen
UseMemoryWriter:LWenn kein Datei-Name angegeben ist, so kann diese Eigenschaft auf True gestelltwerden. Dann erfolgt die Ausgabe in den Speicher und kann per XMLAsString ermittelt werden.
Aktive-Eigenschaften (Methoden)
BeginElement:CNeues XML-Element schreiben. Die Zuweisung ist der Name des XML-Elementes.
EndElementAktuelles XML-Element schließen.
WriteAttrib:ADem aktuellen XML-Element ein Attribut mit Wert zuweisen
Array-Format: { Attribut-Name.C, Attribut-Wert:C }
WriteValueDem aktuellen XML-Element einen Wert zuweisen
WriteCDataDem aktuellen XML-Element CDATA-Information zuweisen. CDATA-Bereiche werden beim Parsen von XML-Dokumenten ignoriert, können also z.B. wiederum XML-Tags beinhalten.
SchemaValid:LFührt eine Schema-Validierung durch
SchemaErrors:CListe aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab
Methoden
XMLAsString:CHiermit kann der XML-Inhalt als String ermittelt werden, falls kein Datei-Name verwendet wird. Siehe Eigenschaft UseMemoryWriter
Verwendung
Es ist die folgende Aufruf-Hierarchie der einzelnen Eigenschaften zu beachten:
-1..1 BeginElement
-0..n WriteAttrib
-0..1 WriteValue
-0..n BeginElement
-0..n WriteAttrib
-0..n WriteCData
-0..1 WriteValue
-0..n BeginElement
(...)
-0..n EndElement
-0..n EndElement
-1..1 EndElement
Der einzelne umschließende Begin/EndElement-Aufruf ist nicht obligatorisch, sollte jedoch für eine saubere und gültige XML-Struktur gesetzt werden (sofern die Anforderung nichts anderes verlangt).
Beispiel
// HINWEIS: Mit diesem Beispiel-CodeBlock kann zum Testen eine realistische
// XML-Datei für das Beispiel der Klasse "TBeXMLReader" generiert werden!
|oXMLWriter, oXMLElem, oXMLAttrib, cXMLDatei, i, k, tTime,
oDM, oDab000, oDab050, oDab055, nKdNrVon, nKdNrBis|
cXMLDatei := 'C:\Delphi\VSS\Intern\3rd_Party\DIXml\Demos\Output1.xml',
oDM := CreateObject('TBeDBGet'),
oDab000 := DbGetTable(oDM, waDAB000),
oDab050 := DbGetTable(oDM, waDAB050),
oDab055 := DbGetTable(oDM, waDAB055),
// XML-Writer instanziieren und XML-Datei öffnen
oXMLWriter := CreateObject('TBeXMLWriter'),
oXMLWriter.Encoding := 'UTF-8',
oXMLWriter.Indent := 2,
oXMLWriter.FileName := cXMLDatei,
oXMLWriter.Active := true,
startseq
nKdNrVon := 00001,
nKdNrBis := 80000,
k := 0,
tTime := TimeEx(),
oXMLWriter.BeginElement := 'be',
// Inhalte generieren
DBScope( {nKdNrVon}, {nKdNrBis}, oDab000 ),
DBGoTop(oDab000),
while not Eof(oDab000) do
oXMLWriter.BeginElement := 'kunde',
oXMLWriter.WriteAttrib := { 'kdnr', Alltrim(Str(oDab000:KDNR,8)) },
oXMLWriter.WriteAttrib := { 'matchcode', Alltrim(oDab000:MATCHCODE) },
oDab050.IndexName := 'DAB052',
DbScope( {nKdNrVon}, {nKdNrBis}, oDab050 ),
while not Eof(oDab050) do
oXMLWriter.BeginElement := 'auftrag',
oXMLWriter.WriteAttrib := { 'anummer', Alltrim(Str(oDab050:ANUMMER,6)) },
oXMLWriter.WriteAttrib := { 'termin', oDab050:TERMIN },
oXMLWriter.WriteAttrib := { 'datum', DToS(Date()) },
i := 0,
DbScope( {oDab050:ANUMMER+' '}, {oDab050:ANUMMER+'999'}, oDab055 ),
while not Eof(oDab055) do
oXMLWriter.BeginElement := 'aufpos',
oXMLWriter.WriteAttrib := { 'posnr', Alltrim(Substr(oDab055:APNUMMER,7,3)) },
if Alltrim(oDab055:ARTNR) <> '@@@@@' then
oXMLWriter.WriteAttrib := { 'artnr', Alltrim(oDab055:ARTNR) },
oXMLWriter.WriteAttrib := { 'menge', Alltrim(Str(oDab055:BMenge,14,DABPAR:NKSTELLEN)) },
else
oXMLWriter.WriteValue := oDab055:MEMO,
endif,
oXMLWriter.EndElement,
k++,
i++,
DBSkip(1, oDab055),
end,
// ---> Hier NICHT mehr erlaubt !!!
// oXMLWriter.WriteAttrib := { 'posanzahl', Str(i,3) },
oXMLWriter.EndElement,
k++,
DBSkip(1, oDab050)
end,
oXMLWriter.EndElement,
k++,
DbSkip(1, oDab000),
end,
oXMLWriter.EndElement,
always
oXMLWriter.Active := false,
stopseq,
tTime := Round((TimeEx() - tTime) * 24 * 60 * 60, 6),
writeln( FloatToStr(k) + ' Sätze in ' + FloatToStr(tTime) + ' Sekunden als XML-Elemente aus Datenbank exportiert.' ),