Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Dom Xml e dintorni
Forum - Visual Basic 6 - Dom Xml e dintorni

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
gvigliani (Normal User)
Pro


Messaggi: 106
Iscritto: 30/12/2006

Segnala al moderatore
Postato alle 11:11
Domenica, 25/01/2009
Ciao a tutti ed un grazie anticipato a chi vorra' aiutarmi. Ho un file xml e dal quale devo estrapolare i dati in esso contenuti. La sua rchitettura è clssica se non per qualche modifica avvenuta al suo interno.
=================================== 2 Detail
<Entry>
<Percentage>99.90</Percentage>
<Return>0.10</Return>
<Event>APOLLON LIMASSOL # ALKI LARNACA</Event>
<BetKind>Back/Lay</BetKind>
<Runner>Apollon Limassol</Runner>
<BetType>1X2</BetType>
<Description>Sportingbet: 1.45 / BetssonExchange: 1.45</Description>
<Date>25/01/2009</Date>
<GUID>d57bd1c151c24d7e9a1acf3d6a4dee23</GUID>
<IsNew>False</IsNew>
<DetectionDate>25/01/2009</DetectionDate>
<Details>
<Detail>
<Name>Apollon Limassol</Name>
<BetKindEntry>Back</BetKindEntry>
<BookerId>6</BookerId>
<Booker>Sportingbet</Booker>
<RawOdds>1.450</RawOdds>
<Volume>0</Volume>
<Commission>0.00</Commission>
<EntryIndex>1</EntryIndex>
<EntrySubIndex>-1</EntrySubIndex>
<League>Cypriot League Matches </League>
</Detail>
<Detail>
<Name>Apollon Limassol</Name>
<BetKindEntry>Lay</BetKindEntry>
<BookerId>33</BookerId>
<Booker>BetssonExchange</Booker>
<RawOdds>1.430</RawOdds>
<Volume>10</Volume>
<Commission>4.00</Commission>
<EntryIndex>2</EntryIndex>
<EntrySubIndex>-1</EntrySubIndex>
<League>Cyprus Division 1</League>
</Detail>
</Details>
</Entry>
==============================================
-------------------------------- 3 Detail
<Entry>
<Percentage>98.48</Percentage>
<Return>1.52</Return>
<Event>BOLOGNA # AC MILAN</Event>
<BetKind>Back All</BetKind>
<Runner>N/A</Runner>
<BetType>Asian Handicap +0/-0</BetType>
<Description>(6.68@PinnacleSports/3.61@PinnacleSports) 4.83 - 1.29 @ 888Sport</Description>
<Date>25/01/2009</Date>
<GUID>98e636761e72452dafe270705ad4d181</GUID>
<IsNew>False</IsNew>
<DetectionDate>25/01/2009</DetectionDate>
<Details>
<Detail>
<Name>Bologna</Name>
<BetKindEntry>Back</BetKindEntry>
<BookerId>22</BookerId>
<Booker>PinnacleSports</Booker>
<RawOdds>6.680</RawOdds>
<Volume>0</Volume>
<Commission>0.00</Commission>
<EntryIndex>1</EntryIndex>
<EntrySubIndex>1</EntrySubIndex>
<League>Serie A</League>
</Detail>
<Detail>
<Name>Draw</Name>
<BetKindEntry>Back</BetKindEntry>
<BookerId>22</BookerId>
<Booker>PinnacleSports</Booker>
<RawOdds>3.610</RawOdds>
<Volume>0</Volume>
<Commission>0.00</Commission>
<EntryIndex>1</EntryIndex>
<EntrySubIndex>2</EntrySubIndex>
<League>Serie A</League>
</Detail>
<Detail>
<Name>AC Milan - 0</Name>
<BetKindEntry>Back</BetKindEntry>
<BookerId>44</BookerId>
<Booker>888Sport</Booker>
<RawOdds>1.286</RawOdds>
<Volume>0</Volume>
<Commission>0.00</Commission>
<EntryIndex>2</EntryIndex>
<EntrySubIndex>-1</EntrySubIndex>
<League>Italian Serie A</League>
</Detail>
</Details>
</Entry>
<Entry>


Come si puo' evincere l'xml è diviso in piu' parti.
La prima che fa capo al nodo Entry ( e fin qui tutto bene) con i suoi componenti che sono 10.
Al di sotto di questo nodo ce n'è un altro (Details) con altri  sottonodi (Detail).
Leggerli non sarebbe un problema ma questo nasce nel momento in cui i sottonodi (Detail) sono in numero di 2 o 3.
Dovendo mettere questi dati in una griglia, succede che partendo dal primo nodo (Entry) accedo al primo componente che è Percentage. Mi posiziono sulla colonna 0 della griglia ed incrementando la riga mi stampo nella griglia tutti i record. Faccio cosi' fino all'ultimo componente che è DetectionDate e ripeto per tutti la stessa prassi. Mi porto sulla colonna successiva, riparto dalla riga 1 (la 0 è occupata dalle intestazioni) e mi riempio in verticale la griglia stessa. Quando però arrivo al sottonodo (Details/) non sapendo a priori quanti sottonodi (Detail) ci sono il riempimento della griglia si sfalsa perche' a volte lo riempie con 2 ed altre volte con 3 elementi successivi. Potete aiutarmi a risolvere il problema?

Grazie

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 11:43
Domenica, 25/01/2009
mm..nn so se ho capito bene comunque io ho capito che tu hai un blocco (<Details></Details>;) e all'interno ci sono vari blocchi(Detail) però tu non sai quanti ce ne sono infatti potrebbero essere ad esempio 2:
<Details>
<Detail> (primo blocco)
...
</Detail>
<Detail> (secondo blocco)
...
</Detail>
</Details>

Ma ce ne potrebbe essere anche magari solo 1 blocco oppure 3 quindi il numero dei blocchi <Detail> può variare...quindi a te serve capire quanti blocchi <Detail> ci sono giusto?
Se si allora con la funzione Instr() devi trovare il numero dei blocchi <Detail> in questo modo:
Codice sorgente - presumibilmente VB.NET

  1. 'nella sub di un button
  2. dim stringa as string, i as integer
  3. 'in stringa poi tu metterai il codice xml
  4. i = 1
  5. do
  6. if instr(i, stringa, "<Detail>") > 0 then
  7. i = i + 1
  8. else
  9. msgbox "Numero detail:" &  (i - 1)
  10. i = 1
  11. end if
  12. doevents
  13. loop until i = 1
  14. ' al posto del msgbox il numero di <Detail> te li salvi in una variabile
  15. 'resto del codice



Se non è questo ciò che ti serviva spiegati meglio...

PM Quote
Avatar
gvigliani (Normal User)
Pro


Messaggi: 106
Iscritto: 30/12/2006

Segnala al moderatore
Postato alle 11:55
Domenica, 25/01/2009
Purtroppo con questo metodo io trovo solo il numero di Detail nel file totale e non nel blocco XML. Ogni blocco è formato da:

Entry
      primo record
      secondo record
      E.mo record
   Details
      Detail
          primo record
          secondo record
          E.mo record
      Detail
          primo record
          secondo record
          E.mo record
      Detail(opzionale)
          primo record (opzionale)
          secondo record (opzionale)
          E.mo Record (Opzionale)

in un file xml come quello che ti ho mandato, di blocchi come questi potrebbero essercene a centinaia quindi con il tuo codice posso sapere quante voci detail in totale ci sono nel file ma non quante ce ne sono all'interno del singolo blocco Entry.
Spero di essere stato un po' piu' chiaro.
Grazie    
      

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 12:31
Domenica, 25/01/2009
ah ora ho capito...bè potresti usare la funzione Split per dividere i vari blocchi e così ricerchi in ogni singolo blocco...come carattere delimitatore puoi usare <Entry>

PM Quote
Avatar
gvigliani (Normal User)
Pro


Messaggi: 106
Iscritto: 30/12/2006

Segnala al moderatore
Postato alle 12:55
Domenica, 25/01/2009
Dim strsource As String, prova As String
strsource = Inet.OpenURL(ind_ricerca)
prova = Split(strsource, "Entry")

stavo facendo una prova ma mi da errore "Tipo non corrispondente". Eppure prova è una stringa ed anche strsource.
Dove sta l'inghippo?

Grazie

PM Quote
Avatar
gvigliani (Normal User)
Pro


Messaggi: 106
Iscritto: 30/12/2006

Segnala al moderatore
Postato alle 12:56
Domenica, 25/01/2009
Dim strsource As String, prova As String
strsource = Inet.OpenURL(ind_ricerca)
prova = Split(strsource, "Entry")

stavo facendo una prova ma mi da errore "Tipo non corrispondente". Eppure prova è una stringa ed anche strsource.
Dove sta l'inghippo?

Grazie

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 13:01
Domenica, 25/01/2009
prova deve essere un array quindi devi dichiararlo così: dim prova() as string
ATTENZIONE: come delimitatore non usare "entry" ma "<entry>".
Se il codice xml è fatto così:
<entry>
...
</entry>
<entry>
...
</entry>

sono due blocchi quindi prova avrà 2 elementi cioè prova(0) e prova(1) e ognuno contiene un blocco

PM Quote
Avatar
gvigliani (Normal User)
Pro


Messaggi: 106
Iscritto: 30/12/2006

Segnala al moderatore
Postato alle 13:13
Domenica, 25/01/2009
No, è un lavoro immane e poi i blocchi in quel pezzetto di codice sono 2 ma nell'intero file sono centinaia e dovrei ricontrollarli uno ad uno perdendo il fattore principale del mio lavoro. La velocita' di aggiornamento.
Dovra' pur esserci un modo di lavorare in un file xml in modo che non si debbano leggere i tutti i record in un blocco con For Each ... next
Questo perche' se io riesco a leggere un record alla volta posso sapere a priori a seconda del valore di BetType se il blocco avra' 2 o 3 Detail.
In pratica vorrei poter leggere il primo valore di ogni blocco , verificarlo ed andare avanti. Mentre con For Each Next me li legge tutti in sequenza.
Grazie

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 14:29
Domenica, 25/01/2009
il primo valore di ogni blocco?
mm.. nn ti riesco a seguire...cmq per contare i detail di ogni blocco l'unica idea che ho al momento è quella che ti ho detto sopra...e poi un ciclo mi sembra inevitabile...come puoi controllare tutti i tuoi blocchi senza un ciclo?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo