Condividi:        

excel 2010: spiegazione struttura xml

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

excel 2010: spiegazione struttura xml

Postdi karug64 » 16/11/15 13:21

Salve a tutti.
Dovrei leggere un file XML che ha questa struttura:

Codice: Seleziona tutto
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="Openrider">
-<trk>
<name>3_20151024111903.gpx</name>

-<trkseg>

-<trkpt lon="14.728406562782427" lat="36.91666946952719">
<ele>604.596997568352</ele>
<time>2015-10-24T11:20:25Z</time>
</trkpt>

-<trkpt lon="14.728218048074396" lat="36.916561309435984">
<ele>601.1581260268515</ele>
<time>2015-10-24T11:20:30Z</time>
</trkpt>


e mettere i vari dati in un foglio Excel così composto:
data,ora,lat,lon,atitudine (che sarebbe <ele>)

Excel non lo importa in automatico tramite wizard (importa dati , ecc ecc).
Sto quindi cercando il modo di leggerlo da codice.

Potreste dirmi in questa struttura quali sono i:
-i nodi padre
-i nodi
-gli attributi

in modo da cercare di capire il senso di alcuni codici rinvenuti in rete ?
Un esempio di codice sarebbe il massimo, ma non chiedo tanto ....

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: excel 2010: spiegazione struttura xml

Postdi Anthony47 » 16/11/15 15:31

Ho creato un file xml col contenuto che hai pubblicato, completando e "pareggiando" i tag; poi ho importato il file in excel usando Menu /Dati /gruppo Carica dati esterni, Da altre origini, Importazione dati XML.
Il risultato e' come da immagine:
Immagine
hosting immagini
In B5 ho calcolato la "geodistanza" in metri con la formula visibile nella barra della formula.

Certamente col vba si puo' fare altrettanto, usando i contenuti della libreria Microsoft XML (msxml*.dll), ma se Excel lo fa per te in importazione guidata penso che sia piu' semplice; puoi anche registrare una macro mentre fai l'operazione una volta, e usare il codice come base per ulteriori automazioni.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel 2010: spiegazione struttura xml

Postdi karug64 » 16/11/15 17:04

Innanzitutto grazie.
Il problema è questo:

i file GPX sono frutto di estrazioni fatte da app per smartphone che utilizzo per tracciate le mie uscite in bici.
Nella fattispecie il file di cui ho postato il codice, è creato da un programma che lo salva in maniera "classica" e più o meno regolare.
Altri programmi salvano file xml che però in importazione diretta danno errori e non vengono importati. Per esempio, guarda questo codice, generato da altra app:

Codice: Seleziona tutto
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><gpx version="1.1" creator="de.rooehler.bikecomputer.pro" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/gpx/1/1/gpx.xsd" xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gpx="http://www.topografix.com/GPX/1/1">
<metadata>
<time>2015-11-07T14:15:22+01:00
</time>
</metadata>
<trk>
<name>Uscita pomeridiana</name>
<trkseg>
<trkpt lat="36.916725" lon="14.728972">
<ele>490</ele>
<time>2015-11-07T14:15:32+01:00</time>
</trkpt>
<trkpt lat="36.916622" lon="14.728893">
<ele>495</ele>
<time>2015-11-07T14:15:46+01:00</time>
</trkpt>


Se provo ad importarlo con il wizard non funziona.
Per questo, non sapendo quale programma genera l'xml, volevo produrre un codice che universalmente caricasse i dati, in considerazione del fatto, che comunque, sempre di file xml si tratta, e che i nodi e gli attributi si chiamano sempre nello stesso modo.
Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel 2010: spiegazione struttura xml

Postdi karug64 » 16/11/15 22:56

Vi aggiorno.

Ho approntato questa routine che mi estrae i dati dal file xml e li scrive su foglio1. Eccola:


Codice: Seleziona tutto
Set Nodo = Obj.DocumentElement.SelectNodes("trk/trkseg/trkpt")
    riga = 1
     For Each Nome In Nodo
      riga = riga + 1
            longitudine = Nome.Attributes(0).Text
            latitudine = Nome.Attributes(1).Text
            Foglio1.Cells(riga, 2).Value = latitudine
            Foglio1.Cells(riga, 1).Value = longitudine
            Foglio1.Cells(riga, 3).Value = Nome.Text
            altitudine = ""
            For x = 1 To Len(Nome.Text)
                If Mid(Nome.Text, x, 1) = " " Then
                    altitudine = Mid(Nome.Text, 1, x - 1)
                    datauscita = Mid(Nome.Text, x + 1, 10)
                    orauscita = Mid(Nome.Text, x + 12, 8)
                End If
                Foglio1.Cells(riga, 4).Value = altitudine
                Foglio1.Cells(riga, 5).Value = datauscita
                Foglio1.Cells(riga, 6).Value = orauscita
            Next x
      Next


Sono sicuro che sia un metodo migliore per estrarre i dati dall'xml (considerato che, per esempio, altitudine (</ele>) e data sono due nodi diversi ma che vengono letti insieme in un'unica stringa ....

Qualche suggerimento ?
Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel 2010: spiegazione struttura xml

Postdi Anthony47 » 16/11/15 23:34

Se funziona e' perfetto cosi'...

Perche' quei file xml non hanno una struttura sintatticamente corretta (sempre che siano stati riportati integralmente).
Esempio (sull'ultimo file):
-il tag <gpx> non e' chiuso
-idem per i tag <trkseg> <trk>
-presenza di piu' elementi di primo livello (gpx, metadata, trk), mentre il linguaggio ne impone uno solo

Un file con questi errori dovrebbe essere ininterpretabile.

Mi sembra pero' clamoroso che gli strumenti che menzioni abbiano adottato lo standard xml ma poi non lo rispettino. Tu sei sicuro che i file pubblicati siano completi?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel 2010: spiegazione struttura xml

Postdi karug64 » 17/11/15 08:01

Ok. Utilizzo il codice scritto.
Per completezza, posto i due file GPX completi:

http://www.filedropper.com/wizardsi

http://www.filedropper.com/wizardno

Non sono modificati e sono frutto dell'eleborazione di due programmi diversi.
Mentre il primo è importabile, tramite wizard, il secondo mi da una serie di errori e importa solo righe con sempre le stesse informazioni.

Grazie.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel 2010: spiegazione struttura xml

Postdi karug64 » 17/11/15 20:26

Riprendo l'argomento.
Mi sono accorto che la stringa con i nodi letta in maniera unica (piuttosto che in due campi separati - altitudine / data orario) in un caso è separata da uno spazio (e la mia routine riesce a separare i campi in maniera giusta) e nell'altro, invece non mette spazi.

604.5969975683522015-10-24T11:20:25Z

507 2015-11-07T14:17:02+01:00

Tra l'altro le lunghezze sono diverse (sia della data e orario che delle altitudini) e non posso capire dove separarle.

E' quindi importante sapere come leggere "separatamente" i nodi.

Potete aiutarmi ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: excel 2010: spiegazione struttura xml

Postdi Anthony47 » 18/11/15 23:10

Secondo me ognuno qui su questo forum sa interpretare e sfruttare meglio Excel di quanto non sappia interpretare un file xml; certamente vale per me.
Mi permetto quindi di raccomandare di importare il file in Excel tramite Importa dati da Xml; e ambedue il file che hai pubblicato, sia wizardsi che wizardno, vengono importati da Excel con tutti gli elementi presenti, compreso lat, lon, ele, time (1049 punti in wizardno, 479 su wizardsi)

Devo correggere il suggerimento di "registrare una macro mentre fai l'operazione una volta, e usare il codice come base per ulteriori automazioni": in realta' la macro non registra niente, ma le "ulteriori automazioni" puoi farle lo stesso. Ad esempio se su Foglio1 importi manualmente una volta il contenuto di un file, puoi usare successivamente quella importazione (memorizzata nel foglio excel) per importare file aventi lo stesso "schema".
Bastera' che in una macro usi l'istruzione tipo
Codice: Seleziona tutto
    ActiveWorkbook.XmlMaps("gpx_mapping1").Import URL:=NuovoFileName

Questo ti importera' sulla tabella le informazioni presenti sul file importato al momento, secondo lo schema proprio di quella importazione; ovviamente lo schema del file che importi deve essere uguale a quello che la tabella di importazione ha memorizzato, altrimenti l'operazione fallira'.
Il "nome" del formato da utilizzare ("gpx_mapping1", nell'esempio) lo leggi selezionando una cella della tabella di importazione Xml; poi tasto dx, XML, Proprieta' mapping Xml

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "excel 2010: spiegazione struttura xml":


Chi c’è in linea

Visitano il forum: Nessuno e 35 ospiti