XmlLoad
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:
_XmlLoadHugeTextNode: Knoten mit Inhalten größer als 10 MB laden
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:
_ErrHdlInvalid: Einer der übergebenen Deskriptoren ist ungültig_ErrValueInvalid: In (int2) ist nicht0angegeben.