Zum Hauptinhalt springen

XmlLoad

obj -> XmlLoad(alpha1[, int2[, handle3[, alpha4[, handle5]]]]) : int

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

XML-Daten lesen

Details

Diese Anweisung lädt XML-Daten aus der in (alpha1) angegebenen externen Datei und erzeugt eine _CteNode-Struktur unterhalb des in (obj) übergebenen Objekts. Das übergebene Objekt muss vom Typ _CteNode sein.

Optional kann in (int2) folgende Option angegeben werden:

Befinden sich die Daten bereits in einem Memory -Objekt, kann das Objekt in (handle3) übergeben werden. In diesem Fall wird die Angabe des Dateinamens in (alpha1) ignoriert.

In (alpha4) bzw. (int5) kann ein Schema als externe Datei bzw. Memory -Objekt angegeben werden.

Als Resultat wird ein Fehlerwert zurückgegeben. Folgende Fehlerwerte können zurückgegeben werden:

Wurde die Anweisung erfolgreich ausgeführt, befinden sich die Informationen in CteNode -Objekten unterhalb des in (obj) übergebenen Objekts und können mit den Befehlen für dynamische Strukturen verarbeitet werden.

Weitere Informationen zu einem XML-Fehler können mit der Anweisung XmlError () ermittelt werden.

Beispiel:

sub ReadXML
(
aHdlMem : handle;
)

local
{
tXMLDoc : handle;
tXMLAttr : handle;
tXMLItemRoot : handle;
tXMLNode : handle;
tErr : int;
tName : alpha(4096);
tValue : alpha(4096);
}

{
tXMLDoc # CteOpen(_CteNode);

tErr # tXMLDoc->XmlLoad('', 0, aHdlMem);

if (tErr = _ErrOk)
{
// Standalone-Dokumentdeklaration ermitteln
tXMLAttr # tXMLDoc->CteRead(_CteAttribTree | _CteCmpE, 0, 'standalone');
if (tXMLAttr > 0 and tXMLAttr->spValueAlpha =^ 'yes')
{
// ...
}

// Element (Wurzel) ermitteln
for tXMLItemRoot # tXMLDoc->CteRead(_CteChildList | _CteFirst);
loop tXMLItemRoot # tXMLDoc->CteRead(_CteChildList | _CteNext, tXMLItemRoot);
while (tXMLItemRoot > 0)
{
if (tXMLItemRoot->spID = _XmlNodeDocumentType)
{
// Name des Dokumenttyps ermitteln
tName # tXMLItemRoot->spName;
// Wert des Dokumenttyp ermitteln
tValue # tXMLItemRoot->spValueAlpha;
}
else
{
for tXMLNode # tXMLItemRoot->CteRead(_CteChildList | _CteFirst);
loop tXMLNode # tXMLItemRoot->CteRead(_CteChildList | _CteNext, tXMLNode);
while (tXMLNode > 0)
{
switch (tXMLNode->spID)
{
// Element
case _XmlNodeElement :
{
for tXMLAttr # tXMLNode->CteRead(_CteAttribList | _CteFirst);
loop tXMLAttr # tXMLNode->CteRead(_CteAttribList | _CteNext, tXMLAttr);
while (tXMLAttr > 0)
{
// Attributname ermitteln
tName # tXMLAttr->spName;
// Attributwert ermitteln
tValue # tXMLAttr->spValueAlpha;

// ...
}
}

// Kommentar
case _XmlNodeComment :
{
// Kommentar ermitteln
tValue # tXMLNode->spValueAlpha;

// ...
}

// ...
}
}
}
}
}

tXMLDoc->CteClear(true);
tXMLDoc->CteClose();

// Fehler bei XMLLoad()
if (tErr != _ErrOk)
{
// XML-Fehler
if (tErr <= _ErrXmlWarning and tErr >= _ErrXmlFatal)
WinDialogBox(0, 'Fehler beim Laden von XML-Daten',
XmlError(_XmlErrorText) + ' (Fehler ' + XmlError(_XmlErrorCode) +
') Zeile: ' + XmlError(_XmlErrorLine) + ' Spalte: ' +
XmlError(_XmlErrorColumn), _WinIcoError, _WinDialogOK, 1);
}
}

Mögliche Laufzeitfehler: