Scopo
Ritorna vero se l'oggetto XMLNode ha ancora nodi figli da non ancora visitati con la funzione GetNextNode. Di solito si usa nella condizione del ciclo While che scandisce i nodi figli del nodo corrente.
Sintassi
boolean NavigaAncora = False // Controllo se ci sono altri figli da navigare
//
NavigaAncora := XMLNode.HasNextNode()
//
NavigaAncora := XMLNode.HasNextNode()
Argomenti
Questa funzione non ha argomenti.Valore di ritorno
Ritorna True se l'oggetto XMLNode possiede ancora nodi figli da visitare, False altrimenti.
Esempio di codice
// *********************************************************
// Explain which processing is carried out by this procedure
// *********************************************************
public void XMLDocument.Importa0(
XMLNode Sorgente // Nodo XML da cui leggere
MyXMLItem Padre // INDE Item in cui inserire i figli
)
{
// Finché trovo degli oggetti contenuti nella sorgente aggiungo figli
// all'oggetto padre
while Sorgente.HasNextNode()
{
MyXMLItem NuovoOggetto = new() //
XMLNode Nodo = null //
//
Nodo := Sorgente.GetNextNode()
//
// Scrivo nel debug il codice XML che sto leggendo
EsempiGL.DTTLogMessage(Nodo.ToString(), ??, ??)
//
// Se sto leggendo un oggetto di tipo item
if Nodo.Name() = item AND Nodo.IsElement()
{
NuovoOggetto.Nome := Nodo.GetAttribute(Nome)
NuovoOggetto.Descrizione := Nodo.GetAttribute(Descrizione)
Padre.ItemsFigli.Add(NuovoOggetto)
}
//
// Se è un nodo di tipo commento lo scrivo nel debug
if Nodo.Type() = XML Comment Type
{
EsempiGL.DTTLogMessage(Nodo.Value(), ??, ??)
}
//
// Se il sorgente è di tipo text scrivo nel debug il testo contenuto
if Nodo.IsText()
{
EsempiGL.DTTLogMessage(Nodo.Value(), ??, ??)
}
//
if Nodo.HasNextNode()
{
this.Importa0(Nodo, NuovoOggetto)
}
}
Padre.Loaded := True
Padre.ItemsFigli.Loaded := True
}
// Explain which processing is carried out by this procedure
// *********************************************************
public void XMLDocument.Importa0(
XMLNode Sorgente // Nodo XML da cui leggere
MyXMLItem Padre // INDE Item in cui inserire i figli
)
{
// Finché trovo degli oggetti contenuti nella sorgente aggiungo figli
// all'oggetto padre
while Sorgente.HasNextNode()
{
MyXMLItem NuovoOggetto = new() //
XMLNode Nodo = null //
//
Nodo := Sorgente.GetNextNode()
//
// Scrivo nel debug il codice XML che sto leggendo
EsempiGL.DTTLogMessage(Nodo.ToString(), ??, ??)
//
// Se sto leggendo un oggetto di tipo item
if Nodo.Name() = item AND Nodo.IsElement()
{
NuovoOggetto.Nome := Nodo.GetAttribute(Nome)
NuovoOggetto.Descrizione := Nodo.GetAttribute(Descrizione)
Padre.ItemsFigli.Add(NuovoOggetto)
}
//
// Se è un nodo di tipo commento lo scrivo nel debug
if Nodo.Type() = XML Comment Type
{
EsempiGL.DTTLogMessage(Nodo.Value(), ??, ??)
}
//
// Se il sorgente è di tipo text scrivo nel debug il testo contenuto
if Nodo.IsText()
{
EsempiGL.DTTLogMessage(Nodo.Value(), ??, ??)
}
//
if Nodo.HasNextNode()
{
this.Importa0(Nodo, NuovoOggetto)
}
}
Padre.Loaded := True
Padre.ItemsFigli.Loaded := True
}
- Internamente l'oggetto XMLNode mantiene l'indice dell'ultimo nodo visitato. E' possibile resettare questi indici, impostando l'oggetto come nuovamente da visitare, mediante l'utilizzo della procedura Reset.
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680