* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 19, 2024, 11:55:01 am

Inserisci il nome utente, la password e la durata della sessione.

392 Visitatori, 0 Utenti

Autore Topic: XML: da dove cominciare?  (Letto 16880 volte)

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
XML: da dove cominciare?
« il: Aprile 16, 2013, 03:44:53 pm »
Ciao a tutti! E' da un po' che non mi faccio vivo, anche se continuo a lurkare selvaggiamente nell'ombra  ;D
Vengo al dunque: sono alle prese con la pianificazione di un progettino che ho in mente da tempo e che vede la necessità di utilizzare un grosso file XML (sui 15 mega) dal quale estrapolare dei dati in un determinato ordine, secondo determinate condizioni. I dati estrapolati verranno ricombinati e dati in pasto a TeX per tirarne fuori un corposo documento da mandare in stampa.

Problemi: 1) il file XML dal quale devo estrapolare i dati è in codifica UTF-8, 2) ha una struttura zeppa di sottonodi e, soprattutto, 3) non so una mazza di XML  :D

Qualcuno pratico mi illumina sulle possibilità di Laz/fpc di gestire XML e sulle problematiche della codifica UTF-8?  :)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #1 il: Aprile 16, 2013, 04:14:29 pm »
Allora UTF-8 o meno, usa il TXMLDocument di lazarus ...
Si arrangia lui a leggere.
Per l'estrazione dei noti d'interesse suggerire XPATH.
XMLRead, XMLWrite contengono le routine per leggere e scrivere XML ;)

Poi per i dettagli di come muoversi, bisogna conoscere la struttura dell'XML.
Se usa o meno i gli attributi o è tutto nodi anche quando non servono :D

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:XML: da dove cominciare?
« Risposta #2 il: Aprile 16, 2013, 04:24:02 pm »
con un XML di 15 mb potrebbe anche essere pesante andare a lavorare con DOM
se i tempi diventano inaccettabili c'è anche un approccio SAX che occupa molte meno risorse del DOM però è meno elastico
se dovesse servire mi ridocumento ;)

UTF-8 non è altro che un tipo di rappresenzazione di file unicode.
unicode completo è a 32 bit (già: 4 byte per ogni carattere)... se il tuo file non fosse UTF-8 ti troveresti a lavorare con un file di 60MB :)

UFT-8 ha in comune con un normale file ASCII i primi 127 caratteri (quelli con bit nr. 8 impostato a 0) e quindi se il tuo file di dati lavora in questo range puoi pensarlo come un normale file ascii.
se hai bisogno di un carattere sopra ai 127, l'8° bit è impostato ad 1 e vuol dire che segue un altro carattere sempre riferito a quello precedente (a cui deve essere concatenato per ottenere il vero carattere unicode).
questa cosa è ricorsiva fino a 4 byte (credo)
Imagination is more important than knowledge (A.Einstein)

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:XML: da dove cominciare?
« Risposta #3 il: Aprile 16, 2013, 04:31:46 pm »
Per prima cosa grazie! Sapevo che avrei avuto le prime risposte in una manciata di minuti  :D

@Stilgar: il file XML utilizza gli attributi... E' grave?  ;D

@nomorelogic: purtroppo devo utilizzare caratteri al di sopra (molto al di sopra!) dei 127. Si tratta di Kanji, per chi mastica giapponese  :)


Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #4 il: Aprile 16, 2013, 06:08:00 pm »
No ... anzi ... meglio se usa gli attributi...
XPATH ti farà estrarre i dati in modo più comodo ;)

Poi mi spieghi come mai sei incasinato con il Kanji :p
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:XML: da dove cominciare?
« Risposta #5 il: Aprile 16, 2013, 10:11:42 pm »
Oh... ok, meglio così, allora  :D
Ho provato a cercare qualche riferimento su XPATH, ma non si trova praticamente niente. Un esempietto minimo per capire?  :)

Nel caso servisse, qui sotto ho allegato un estratto minimo del mio file xml. Quello che dovrei fare è scorrere  tutti i nodi character e, se il sottonodo dic_number->dic_ref, contenente uno specifico dr_type (ad esempio ="nelson_c"), contiene un valore minore di X, allora devo leggere il valore del nodo literal (e di altri, ma quello verrà dopo, non appena riesco a capirci qualcosa  :P ) e salvarlo.

Sul perché/percome del progetto che ho in mente, basti sapere che sono un giappofilo della prima ora e sto sbattendo la testa sui kanji per impararne un quantitativo minimo per cominciare a studiare la lingua più seriamente  :o

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:XML: da dove cominciare?
« Risposta #6 il: Aprile 17, 2013, 08:09:00 am »
Ciao,
come ti consigliava nomorelogic, secondo me la prima cosa che devi valutare e se leggere l'XML con DOM o con SAX.
La differenza principale tra i 2, che di solito mi fa optare per l'uno o per l'altro, è che DOM legge tutto l'XML e lo mette in memoria, così poi lo puoi elaborare come se fosse un albero, andando avanti e tornando indietro a piacimento. SAX invece, legge l'XML poco alla volta e, quando si presenta un nuovo tag, un nuovo attributo, eccetera, fa scattare l'evento corrispondente.
Se per esempio tu devi leggere il tuo file ed uscire al primo tag che trovi con dentro "pippo", la cosa migliore sarebbe leggere l'XML con SAX. Se invece devi continuare a fare avanti e indietro per i vari tag, attributi eccetera, l'ideale è DOM.

Ciao, Mario

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:XML: da dove cominciare?
« Risposta #7 il: Aprile 17, 2013, 10:01:52 am »
Uhm... non so... il mio file ha almeno 15000 "record" (perdonatemi il termine improprio), ognuno formato da svariati "campi". D'altro canto non ho tutto questo bisogno di ottimizzare (il tool non verrà rilasciato al pubblico, ma utilizzato solo da me). Credo che in fin dei conti potrebbe essermi sufficiente una lettura sequenziale, visto che devo scansionare tutti i "record" e "piluccare" quelli che soddisfano determinati criteri.
SAX potrebbe essere una scelta, ma aspetto maggiori delucidazioni su XPATH  ;)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #8 il: Aprile 17, 2013, 10:43:07 am »
Se vuoi ottenere tutti i nodi dell'xml che abbiano un dic_ref di un certo tipo ... (magari l'attributo dr_type="nelson_c") l'espressione xpath che ti server è qualche cosa del tipo:
Codice: [Seleziona]
//dic_ref[@dr_type='nelson_c']
in questo caso ottieni tutti i nodi che abbiano quel determinato attributo in una lista.
nel caso tu volessi filtrare ancora per il contenuto del nodo trovato
Codice: [Seleziona]
//dic_ref[dr_type="nelson_c"]/text()="4985"

Sono esempi a memoria...
« Ultima modifica: Aprile 17, 2013, 10:53:14 am da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:XML: da dove cominciare?
« Risposta #9 il: Aprile 17, 2013, 10:51:26 am »
Grazie mille :)

Appena ho modo, faccio qualche tentativo e vi faccio sapere  ;)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #10 il: Aprile 17, 2013, 11:13:46 am »
Un plug per Firefox :
http://code.google.com/p/xpathchecker/
Puoi verificare l'xpath senza diventare matto.
Io lo uso anche per lavoro :D
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #11 il: Aprile 17, 2013, 11:22:18 am »
Piccolo consiglio:
 tieni conto che i processori XPATH lavorano ad insiemi (liste nel nostro caso)
Quindi prendono in considerazione ogni "step" (definiti da "/") e processano i nodi.
In altre parole.
//dic_ref[@dr_type='nelson_c']
//dic_ref -> /Tutti i nodi a qualsiasi livello/solo quelli dic_ref
di questi ottenuti, fa un secondo giro:
quelli che hanno attributo dr_type con valore 'nelson_c'.
In pratica lavora su una lista che viene via via scremata.
Per avere un minimo di "prestazioni" cerca di filtrare sempre il grosso con i primi step, in modo che i controlli sucessivi siano su liste già piccoline ;)
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:XML: da dove cominciare?
« Risposta #12 il: Aprile 18, 2013, 12:19:15 pm »
Sto facendo qualche prova  :)
Premetto che ho cercato qualcosa anche per SAX, ma non sono riuscito a trovare esempi/guide di utilizzo.
Per quanto riguarda xpath, ci sto giocando un pochino prima di cimentarmi nella stesura del codice. Quello che non riesco a capire è come filtrare i risultati in base a criteri "matematici". Esempio: poniamo che debba filtrare tutti i dati in cui il valore dell'attributo dr_type='nelson_c' sia < 100. Provo a scrivere qualcosa del tipo:

Codice: xpath [Seleziona]

/kanjidic2/character[//dic_ref[@dr_type='nelson_c']<100]


ma il filtro sembra non funzionare. Dove sbaglio? E nel caso volessi inserire condizioni multiple?  ???

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #13 il: Aprile 18, 2013, 12:41:45 pm »
/kanjidic2/character//dic_ref[@dr_type='nelson_c']
Per la selezione del "livello" del nodo.
(ridondante rispetto a //dic_ref[@dr_type='nelson_c'])


www.w3schools.com/xpath

/kanjidic2/character//dic_ref[@dr_type='nelson_c']<100
o
//dic_ref[@dr_type='nelson_c']<100
« Ultima modifica: Aprile 18, 2013, 12:58:04 pm da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:XML: da dove cominciare?
« Risposta #14 il: Aprile 18, 2013, 12:58:44 pm »
(Ho provato ... c'è solo un match)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 578
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 392
Total: 392

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.