Scopo
Ritorna True se il documento XML ha ancora nodi di primo livello non visitati, False altrimenti.
Sintassi
boolean HasAnother = False //
//
HasAnother := XMLDocument.HasNextNode()
//
HasAnother := XMLDocument.HasNextNode()
Argomenti
Questa funzione non ha argomenti.Valore di ritorno
True se il documento XML ha ancora nodi di primo livello non visitati, 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
optional boolean loop = 0 // Vero per resettare ad ogni ciclo il nodo XML padre... causa un loop
)
{
// Se devo trovare un loop fermo il debug a 10 iterazioni
if loop
{
EsempiGL.DTTMaxLoopCycles := C10
}
//
// Finché trovo degli oggetti contenuti nella sorgente aggiungo figli all'oggetto padre
while Sorgente.HasNextNode()
{
MyXMLItem NuovoOggetto = new() //
XMLNode Nodo = null //
string s = "" //
//
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()
{
this.ScriviDebugStruttura(Nodo)
//
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, ??)
}
//
// Se devo causo volontariamente un loop
if loop
{
Sorgente.Reset()
}
}
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
optional boolean loop = 0 // Vero per resettare ad ogni ciclo il nodo XML padre... causa un loop
)
{
// Se devo trovare un loop fermo il debug a 10 iterazioni
if loop
{
EsempiGL.DTTMaxLoopCycles := C10
}
//
// Finché trovo degli oggetti contenuti nella sorgente aggiungo figli all'oggetto padre
while Sorgente.HasNextNode()
{
MyXMLItem NuovoOggetto = new() //
XMLNode Nodo = null //
string s = "" //
//
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()
{
this.ScriviDebugStruttura(Nodo)
//
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, ??)
}
//
// Se devo causo volontariamente un loop
if loop
{
Sorgente.Reset()
}
}
Padre.Loaded := True
Padre.ItemsFigli.Loaded := True
}
- La funzione naviga i figli del documento XML solamente al primo livello, ignorando i livelli più profondi. Per navigare oltre il primo livello occorre realizzare una funzione ricorsiva ed utilizzare anche la corrispondente funzione dell'oggetto XMLNode.
- Solitamente questa funzione viene usata come condizione di un ciclo While per scandire l'elenco dei nodi di primo livello.
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680