83 messaggi dal 17 giugno 2005
Salve a tutti,

mi stò interessando all'utilizzo dei dati in formato XML.

Il problema nasce nella ricerca di un dato all'interno di una struttura di questo tipo. Attualmente l'unico metodo che mi viene in mente è un brutale ciclo for su tutti dati presenti in struttura e il confronto con il valore che ricerco

Esempio

Diciamo di avere un file con questa struttura:

<AnaClienti>
<Cliente>
<Codice>17</Codice>
<Descrizione>Azienda 1</Descrizione>
<Indirizzo>STATALE 98 KM 79,400</Indirizzo>
<Citta>Napoli</Citta>
<Provincia>NA</Provincia>
<Cap>12</Cap>
</Cliente>
<Cliente>
<Codice>18</Codice>
<Descrizione>Azienda 2</Descrizione>
<Indirizzo>STATALE 98 KM 79,400</Indirizzo>
<Citta>Napoli</Citta>
<Provincia>NA</Provincia>
<Cap>12</Cap>
</Cliente>
....
</AnaClienti>

L'utente inserice nella form un codice ed avvia la ricerca.
La ricerca l'ho implementata cos'ì:

'apro il file e lo associo ad un dataset ...
Dim row As DataRow 'istanzio un datarow
'inizio un ciclo sul dataset su cui ho caricato i dati
For i = 0 To myDataSet.Tables(0).Rows.Count - 1
row = table.NewRow()
row("Codice") = myDataSet.Tables(0).Rows(i).Item("Codice")
'confronto il valore attuale con quello inserito
If Trim(row("Codice")) = Trim(pValore) Then
table.Rows.Add(row) 'aggiungo il record al data row
End If
Next

'restituisco il data row

Questa cosa appena il file aumenta di dimensioni diventa..improponibile..anche perchè l'algoritmo deve girare anche su terminali con windows mobile quindi dalle prestazioni..limitate..

Suggerimenti?? Grazie!!
La ricerca all'interno di documenti XML è effettuabile attraverso query XPath (XML Path Language).
Per iniziare ad usare XPath puoi iniziare da qui:

- XPath Tutorial (w3schools)
- XPath (html.it)

In rete trovi comunque un sacco di altro materiale; in particolare usando il parser xml di Microsoft puoi fare riferimento al sito MSDN: XPath Reference

HTH

Matteo Casati
GURU4.net
83 messaggi dal 17 giugno 2005
Ottimo!

Stavo già sbattendo la testa!
Artista ha scritto:
Ottimo! Stavo già sbattendo la testa!


Naaaaaa! (Quasi) nulla è mai complicato come sembra

Alla prossima!

Buona giornata,
Matteo

Matteo Casati
GURU4.net
43 messaggi dal 24 ottobre 2006
se devi tenere d'occhio la performance (soprattutto per xml di centinaia o più righe) stai attento a che tipo di ricerca vuoi fare, se ti serve ad. esempio ricercare un'unica cosa per singolo documento xml
(as. es. se ogni xml ha un'unico nodo <name> e a te interessa solo il valore di quel campo) ti conviene ricavarti tale valore a mano tramite un xmlreader che, rispetto all'xmldocument utilizzabile per le xpath, ha il grosso vantaggio di non leggersi tutto il documento e caricarselo in memoria prima di poterlo utilizzare.
ola
83 messaggi dal 17 giugno 2005
Le performance sono fondamentali! In considerazione del fatto che tutto gira su CF e quindi su terminali dalle capacità eleborative non proprio entusismanti!! Ho dato un' occhiata al linguaggio Xpath ed effettivamente (su file di esempi minimi) riesco a trovare quello che voglio...per le prestazioni proverò l'alternativa.

Il problema attuale è che non riesco a 'tradurre' in Xpath una ricerca di tipo 'like'.
consideriamo questo esempio,che stò usando:

<AnaClienti>
<Cliente>
<Codice>17</Codice>
<Descrizione>Azienda 1 </Descrizione>
<Indirizzo>STATALE 98 KM 79,400</Indirizzo>
<Citta>Napoli</Citta>
<Provincia>NA</Provincia>
<Cap>12</Cap>
</Cliente>

<Cliente>
<Codice>18</Codice>
<Descrizione>Azienda 2</Descrizione>
<Indirizzo>STATALE 98 KM 79,400</Indirizzo>
<Citta>Bari</Citta>
<Provincia>BR</Provincia>
<Cap>12</Cap>
</Cliente></AnaClienti>

La ricerca dei nodi la cui descrizione è esattamente Azienda 1 non è un problema.."/AnaClienti/Cliente[Descrizione="Azienda 1"]"

Ma se volessi quelli che INIZIANO per 'AZ' ??? ( il buon vecchio Like )
Detto questo devo comunque vedere come si comporta la ricerca con file xml che rappresentano archivi dell'ordine di 40 000/50 0000 record...
43 messaggi dal 24 ottobre 2006
usa la x-path function: starts-with(string1,string2)
per un elenco puoi guardare http://www.w3schools.com/xpath/xpath_functions.asp

comunque la cosa più rilevante per decidere come trattare gli xml è soprattutto vedere se devi fare ricerche multiple sullo stesso documento, cmq è da dire che
per ricavare tramite reader dei sottonodi non banali devi perderci un bel pò di tempo nell'implementazione, cosa invece semi-immediata con una xpath,
ola
176 messaggi dal 04 giugno 2007
Contributi | Blog
Con archivi di quelle dimensioni (decine di migliaia di record) un flat XML file ha seri problemi di scalability, soprattutto se devi girare su devices.
Io punterei su un vero database, come SQL Server 2005 Compact Edition (http://www.microsoft.com/sql/editions/compact/ssceoverview.mspx) e lo userei come local store sul PDA, sincronizzando i cambiamenti.

Saluti

--Alessandro

This posting is provided "AS IS" with no warranties, and confers no rights.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.