TBeXMLWriter
TBeXMLWriter
Klasse zur Generierung einer XML-Datei bzw. XML-Daten. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".
Eigenschaften | Beschreibung |
---|---|
FileName:C | Datei-Name der XML-Datei |
Schema:C | Datei-Name zur XML-Schema-Datei |
Encoding:C | Codierung der XML-Datei (default = "UTF-8") |
Standalone:C | Angabe, ob es externe Deklarationen gibt. Mögliche Werte 'yes' / 'no'. Default = 'no'. Groß-Kleinschreibung beachten! |
Indent:N | Anzahl Leerzeichen zu hierarchischen Einrückung der XML-Ausgabe (default = 1) |
WriteXMLStartElement:L | True (default) = Am Anfang der XML-Datei wird das XML-Start-Element mit Codierung usw. eingefügt. |
Active:L | True = XML-Datei zum Schreiben öffnen bzw. ist geöffnetFalse = XML-Datei schließen bzw. ist geschlossen |
UseMemoryWriter:L | Wenn 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. |
BeginElement:C | Neues XML-Element schreiben. Die Zuweisung ist der Name des XML-Elementes. Read-Only |
EndElement:C | Aktuelles XML-Element schließen. Read-Only |
WriteAttrib:A | Dem aktuellen XML-Element ein Attribut mit Wert zuweisen. Array-Format: { Attribut-Name.C, Attribut-Wert:C } Write-Only |
WriteValue:U | Dem aktuellen XML-Element einen Wert zuweisen. Write-Only |
WriteCData:U | Dem aktuellen XML-Element CDATA-Information zuweisen. CDATA-Bereiche werden beim Parsen von XML-Dokumenten ignoriert, können also z.B. wiederum XML-Tags beinhalten. Write-Only |
SchemaValid:L | Führt eine Schema-Validierung durch. Read-Only |
SchemaErrors:C | Liste aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab Read-Only |
Funktionen | Beschreibung |
---|---|
XMLAsString:C | Hiermit 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.' ),