Skip to main content
Skip table of contents

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

CODE
// 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.' ),

Weitere Verknüpfungen

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.