Skip to main content
Skip table of contents

TBeXMLReader

TBeXMLReader

Klasse zum lesen 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:CDatei-Name zur XML-Schema-Datei
Encoding:CCodierung der XML-Datei (default = "UTF-8")
Active:LTrue = XML-Datei zum lesen öffnen bzw. ist geöffnetFalse = XML-Datei schließen bzw. ist geschlossen
CurrElement: TBeXMLElementAktuell eingelesenes XML-Element (siehe ReadNextElement)

Aktive-Eigenschaften (Methoden)

ReadNextElement:LNächstes XML-Element inkl. der Attribute einlesen (ist anschließend über CurrElement abrufbar)
Ergebnis: True = Nächstes XML-Element wurde gelesen
False = keine weiteren XML-Elemente (EOF)
SchemaValid:LFührt eine Schema-Validierung durch
SchemaErrors:C Liste aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab

Methoden

ReadFromXMLString(aXML:C)Wird kein Datei-Name angegeben, so kann mit dieser Methode der XML-Inhalt auch direkt per String geladen werden

Verwendung

-Der XML-Reader liest je ReadNextElement-Aufruf immer ein komplettes XML-Element inkl. aller Attribute und der Attribut-Werte aus, jedoch nicht die folgenden Unter-Elemente und nicht den Element-Wert! (Der Element-Wert ist ein eigenes XML-Text-Element, siehe Beispiel)
-Hierarchien können über CurrElement.Depth des aktuellen Elements ermittelt werden (siehe Beispiel).

ACHTUNG

oXMLReader.Active := false,
darf nicht vor dem Zerstören den Objektes mittels destroyobject aufgerufen werden!
Hintergrund:
Beim Zerstören den Objektes wird
oXMLReader.Active := false,
implizit aufgerufen.
Dabei kommt es zu Problemen, wenn dies zuvor bereits geschehen ist.

Beispiel

CODE
// HINWEIS: XML-Beispiele der Auswertung siehe Klasse "TBeXMLElement" / "TBeXMLAttribute"
// HINWEIS: Mit dem Beispiel-CodeBlock der Klasse "TBeXMLWriter" kann 
//          zum Testen eine realistische XML-Datei generiert werden!

|oXMLReader, oXMLElem, oXMLAttrib, cXMLDatei, i, k, m, tTime, lDoOutput|

cXMLDatei  := 'C:\Delphi\VSS\Intern\3rd_Party\DIXml\Demos\output1.xml',

// XML-Reader instanziieren und XML-Datei öffnen
oXMLReader := CreateObject('TBeXMLReader','BeXMLReader'),
oXMLReader.Encoding := 'UTF-8',
oXMLReader.FileName := cXMLDatei,
oXMLReader.Active   := true,

tTime    := TimeEx(),
k        := 0,
m        := 0,
lDoOutput:= true,

while oXMLReader.ReadNextElement do

  // aktuelles Element merken
  oXMLElem := oXMLReader.CurrElement,
  k++,

  // Ist Element ein regulärer Node?
  if oXMLElem.NodeType = XMLELEMELEMENT_NODE
     or oXMLElem.NodeType = XMLELEMTEXT_NODE then

     m++,

     if lDoOutput then
       // Element-Eigenschaften ausgeben
       WriteLn( Replicate('  ', oXMLElem.Depth ) +
                'Ebene: ' +          Str(oXMLElem.Depth,3),
                'Leeres Element: ' + iif(oXMLElem.IsEmpty, ' Ja ', 'Nein'),
                'Hat einen Wert: ' + iif(oXMLElem.HasValue, ' Ja ', 'Nein'),
                'Anz.Attribute: ' +  Str(CollCount(oXMLElem.Attributes), 3),
                'Name: ' +           oXMLElem.Name,
                iif( oXMLElem.Value <> '', 'Wert: ' +           oXMLElem.Value, '' ) ),
     endif,

     // Element-Attribute ausgeben
     for i := 1 to CollCount(oXMLElem.Attributes) do

        // aktuelles Attribut merken
        oXMLAttrib := CollItem(oXMLElem.Attributes, i),

        if lDoOutput then
          // Attribut-Eigenschaften ausgeben
          WriteLn( Replicate(' ', oXMLElem.Depth ) +
                   '    - Element-Typ: ' +  Str(oXMLAttrib.NodeType,3),
                   'Name: ' +         oXMLAttrib.Name,
                   'Wert: ' +         oXMLAttrib.Value ),
        endif,
     next,
  endif,
end,

tTime := Round((TimeEx() - tTime) * 24 * 60 * 60, 6),
writeln( FloatToStr(k) + ' XML-Elemente (davon ' + FloatToStr(m) + ' relevante Nodes) in '
         + FloatToStr(tTime) + ' Sekunden als Datei gelesen.' ),

Weitere Verknüpfungen


JavaScript errors detected

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

If this problem persists, please contact our support.