Ciao a tutti,
scusate se mi presento subito con una richiesta di aiuto ma al momento mi sembra di non avere altro in mente se non la soluzione di questo problema.
Parto dal presupposto di avere un file XML con queste caratteristiche:
<Entry>
Dato1
Dato2
etc
<Details>
<Detail>
Dato1
Dato2
etc
<Detail>
Dato1
Dato2
etc
<Detail>
Dato1
Dato2
Etc
</Detail>
</Detail>
</Detail>
</Details>
</Entry>
Come si puo' evincere , la prima parte del file è classico e di facile lettura. <Entry>. Ma è nella parte relativa ai 3 sottonodi <Detail> che iniziano i problemi.
Cioè , è vero che impostando :
Set nomedato = elemento.SelectNodes("Entry/Details/Detail/Dato1")
Set nomedato2 = elemento.SelectNodes("Entry/Details/Detail/Dato2")
Set nomeETC = elemento.SelectNodes("Entry/Details/Detail/Etc")
io accedo anche al primo sottonodo ma negli altri non riesco ad entrarci , ovvero non riescio a leggere correttamente i dati in esso contenuti.
Impostando un contatore di array mi da dei valori che sono subito sotto il nodo o addirittura i valori del nodo precedente.
Insomma un vero disastro.
Penso che la soluzione sarebbe quella di rinominare i 3 sottonodi con un nome univoco ma non so da dove cominciare per poterlo fare.
Allego alla presente il file XML zippato per l'eventuale visione.
Il mio codice di lettura è invece classico:
Dim obj As DOMDocument
Dim ritorno As IXMLDOMNodeList
Dim dettaglio As IXMLDOMNodeList
Dim elemento As IXMLDOMElement
Dim nodo As IXMLDOMNode
' CARICO IL FILE XML
Set obj = New DOMDocument
obj.async = False
obj.Load App.Path & "\sviluppo\" & tipo_gioco & ".xml"
Set elemento = obj.documentElement
' RECUPERO IL NODO CHE MI INTERESSA
Set ritorno = elemento.SelectNodes("Entry/Return")
Set evento = elemento.SelectNodes("Entry/Event")
Set betkind = elemento.SelectNodes("Entry/BetKind")
Set runner = elemento.SelectNodes("Entry/Runner")
Set bettype = elemento.SelectNodes("Entry/BetType")
Set Description = elemento.SelectNodes("Entry/Description")
Set dataevento = elemento.SelectNodes("Entry/Date")
Set Guid = elemento.SelectNodes("Entry/GUID")
Set isnew = elemento.SelectNodes("Entry/IsNew")
Set detectiondate = elemento.SelectNodes("Entry/DetectionDate")
For x = 0 To ritorno.Length - 1
MSFlexGrid1.Row = riga: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = ritorno(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = evento(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = tipo_gioco
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = betkind(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = runner(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = bettype(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = Description(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = dataevento(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = Guid(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = isnew(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = detectiondate(x).Text
colonna = 0: riga = riga + 1
Next x
'esco pulito
Set nodo = Nothing
Set ritorno = Nothing
Set elemento = Nothing
Set obj = Nothing
Grazie a tutti
Gaspare
scusate se mi presento subito con una richiesta di aiuto ma al momento mi sembra di non avere altro in mente se non la soluzione di questo problema.
Parto dal presupposto di avere un file XML con queste caratteristiche:
<Entry>
Dato1
Dato2
etc
<Details>
<Detail>
Dato1
Dato2
etc
<Detail>
Dato1
Dato2
etc
<Detail>
Dato1
Dato2
Etc
</Detail>
</Detail>
</Detail>
</Details>
</Entry>
Come si puo' evincere , la prima parte del file è classico e di facile lettura. <Entry>. Ma è nella parte relativa ai 3 sottonodi <Detail> che iniziano i problemi.
Cioè , è vero che impostando :
Set nomedato = elemento.SelectNodes("Entry/Details/Detail/Dato1")
Set nomedato2 = elemento.SelectNodes("Entry/Details/Detail/Dato2")
Set nomeETC = elemento.SelectNodes("Entry/Details/Detail/Etc")
io accedo anche al primo sottonodo ma negli altri non riesco ad entrarci , ovvero non riescio a leggere correttamente i dati in esso contenuti.
Impostando un contatore di array mi da dei valori che sono subito sotto il nodo o addirittura i valori del nodo precedente.
Insomma un vero disastro.
Penso che la soluzione sarebbe quella di rinominare i 3 sottonodi con un nome univoco ma non so da dove cominciare per poterlo fare.
Allego alla presente il file XML zippato per l'eventuale visione.
Il mio codice di lettura è invece classico:
Dim obj As DOMDocument
Dim ritorno As IXMLDOMNodeList
Dim dettaglio As IXMLDOMNodeList
Dim elemento As IXMLDOMElement
Dim nodo As IXMLDOMNode
' CARICO IL FILE XML
Set obj = New DOMDocument
obj.async = False
obj.Load App.Path & "\sviluppo\" & tipo_gioco & ".xml"
Set elemento = obj.documentElement
' RECUPERO IL NODO CHE MI INTERESSA
Set ritorno = elemento.SelectNodes("Entry/Return")
Set evento = elemento.SelectNodes("Entry/Event")
Set betkind = elemento.SelectNodes("Entry/BetKind")
Set runner = elemento.SelectNodes("Entry/Runner")
Set bettype = elemento.SelectNodes("Entry/BetType")
Set Description = elemento.SelectNodes("Entry/Description")
Set dataevento = elemento.SelectNodes("Entry/Date")
Set Guid = elemento.SelectNodes("Entry/GUID")
Set isnew = elemento.SelectNodes("Entry/IsNew")
Set detectiondate = elemento.SelectNodes("Entry/DetectionDate")
For x = 0 To ritorno.Length - 1
MSFlexGrid1.Row = riga: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = ritorno(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = evento(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = tipo_gioco
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = betkind(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = runner(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = bettype(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = Description(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = dataevento(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = Guid(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = isnew(x).Text
colonna = colonna + 1: MSFlexGrid1.col = colonna
MSFlexGrid1.Text = detectiondate(x).Text
colonna = 0: riga = riga + 1
Next x
'esco pulito
Set nodo = Nothing
Set ritorno = Nothing
Set elemento = Nothing
Set obj = Nothing
Grazie a tutti
Gaspare