TBeXMLWriter
Klasse zur Generierung einer XML-Datei bzw. XML-Daten. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".
Eigenschaften
|
Eigenschaft |
Beschreibung |
|---|---|
|
Active:L |
True = XML-Datei zum Schreiben öffnen bzw. ist geöffnetFalse = XML-Datei schließen bzw. ist geschlossen |
|
BeginElement:C |
Neues XML-Element schreiben. Die Zuweisung ist der Name des XML-Elementes. **Read-Only** |
|
Encoding:C |
Codierung der XML-Datei (default = "UTF-8") |
|
EndElement:C |
Aktuelles XML-Element schließen. **Read-Only** |
|
FileName:C |
Datei-Name der XML-Datei |
|
Indent:N |
Anzahl Leerzeichen zu hierarchischen Einrückung der XML-Ausgabe (default = 1) |
|
Name:C |
|
|
Schema:C |
Datei-Name zur XML-Schema-Datei |
|
SchemaErrors:C |
Liste aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab **Read-Only** |
|
SchemaValid:L |
Führt eine Schema-Validierung durch. **Read-Only** |
|
Standalone:C |
Angabe, ob es externe Deklarationen gibt. Mögliche Werte 'yes' / 'no'. Default = 'no'. Groß-Kleinschreibung beachten! |
|
Style:C |
|
|
StyleErrors:C |
|
|
StyleSheet:C |
|
|
Tag:N |
|
|
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. |
|
WriteAttrib:U |
Dem aktuellen XML-Element ein Attribut mit Wert zuweisen. Array-Format: { Attribut-Name.C, Attribut-Wert:C } **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** |
|
WriteValue:U |
Dem aktuellen XML-Element einen Wert zuweisen. **Write-Only** |
|
WriteXMLStartElement:L |
True (default) = Am Anfang der XML-Datei wird das XML-Start-Element mit Codierung usw. eingefügt. |
Methoden
|
Methode |
Beschreibung |
|---|---|
|
XMLAsString():C |
Hiermit kann der XML-Inhalt als String ermittelt werden, falls kein Datei-Name verwendet wird. Siehe Eigenschaft UseMemoryWriter |
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.' ),