Beispiel - Durchsuchen einer XML-Struktur
Beispiel - Durchsuchen einer XML-Struktur Alle Knoten einer Baum-Struktur durchlaufen
In diesem Beispiel wird ein Algorithmus zum Durchlaufen einer Baumstruktur aus CteNode -Objekten vorgestellt. Mit der Funktion können alle Knoten eines gelesenen XML-Dokuments ermittelt werden.
Die Funktion wird rekursiv aufgerufen und startet mit dem Wurzelknoten des Baumes.
sub XmlRead
(
aXmlNode : handle;
)
local
{
tValueAlpha : alpha(4096); // Inhalt des Knotens
tXmlNode : handle;
}
{
// Auswertung des übergebenen Knotens
if (aXmlNode->spType = _TypeAlpha)
{
tValueAlpha # aXmlNode->spValueAlpha;
}
...
// Attribute des Knotens
if (aXmlNode->spAttribCount > 0)
{
for tXmlNode # aXmlNode->CteRead(_CteAttribTree | _CteFirst);
loop tXmlNode # aXmlNode->CteRead(_CteAttribTree | _CteNext, tXmlNode);
while (tXmlNode != 0)
{
tXmlNode->XmlRead();
}
}
// Untergeordnete Objekte des Knotens
if (aXmlNode->spChildCount > 0)
{
for tXmlNode # aXmlNode->CteRead(_CteChildList | _CteFirst);
loop tXmlNode # aXmlNode->CteRead(_CteChildList | _CteNext, tXmlNode);
while (tXmlNode != 0)
{
tXmlNode->XmlRead();
}
}
}
Die Funktion kann nach dem Einlesen eines XML-Dokuments zur Anzeige in einem TreeView -Objekt aufgerufen werden.
main
local
{
tErr : int;
tXmlDoc : handle;
}
{
// Wurzel-Knoten erzeugen
tXmlDoc # CteOpen(_CteNode);
// XML-Dokument lesen
tErr # tXmlDoc->XmlLoad(_Sys->spPathTemp + '\citylist.xml');
tXmlDoc->XmlRead();
// Struktur aus dem Speicher entfernen
tXmlDoc->CteClear(true);
tXmlDoc->CteClose();
}