XmlLoad
obj -> XmlLoad(alpha1[, int2[, handle3[, alpha4[, handle5]]]]) : int
XML-Daten lesen
Details
- obj: Deskriptor eines CteNode -Objekts
- alpha1: Pfad- und Dateiname
- int2:
- Optionen (optional):
_XmlLoadHugeTextNode
- handle3: Deskriptor eines Memory -Objekts (optional)
- alpha4: Pfad- und Dateiname einer Schema-Datei (optional)
- handle5: Deskriptor eines Memory -Objekts mit dem Schema (optional)
- Resultat:
intFehlerwert - Siehe: Verwandte Befehle ,
XmlSave (), Beispiel - Durchsuchen einer XML-Struktur , Blog
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.