Newsgroup: it.comp.java
Titolo: XML e espressioni regolari

Ciao ragazzi,
devo ottenere in contenuto di un tag xml e per velocizzare i tempi
computazionali mi è stato richiesto di non utilizzare  le solite
librerie xml dom o sax ma bensì le espressioni regolari.
Come faccio ad estrare da un tag di questo tipo "<tag>text</tag>" la
stringa "text".
O per lo meno è possibile solo tramite espressioni regolari?
Ciao e grazie.

 <tag>text</tag>
"(<tag>)(.*)(</tag>)"
ma non conosco il supporto per le regexp di java
comunque
java.util.regex
ciao


Forse e' una risposta OT ma mettere sullo stesso piano in termini di
prestazioni DOM e SAX e' una bestemmia.
Consiglio, prima di imbarcarsi alla scoperta della gestione delle
espressioni regolari in java (ottime ma non pensate per essere un
parser xml) , di verificare meglio meglio cosa dovete fare e come
potete farlo.
Spero di non essere stato troppo "impiccione" volevo solo essere
proactive.
saluti

Daniele ha scritto:

Mah... se fosse scritto
<tag>
text
</tag>
non sono cosi' sicuro che si riesca ad estrarre text con una RE.


Aggiungo:
Se fosse <tag>pippo&lt;pluto</tag> una RE leggerebbe
	pippo&lt;pluto
ma il valore corretto sarebbe:
	pippo<pluto
-- 
Andrea Francia
http://www.andreafrancia.it/

 librerie xml dom o sax ma bensì le espressioni regolari.
Ci sarebbe da discutere con la persona che ti ha chiesto questa cosa.
  - un lettore basato su RE può essere più veloce di sax? Mah?
  - si preferisce correre il rischio di scrivere un parser xml in casa 
(correndo il rischio di creare del codice bacato) piuttosto che usare 
delle librerie gratuite di provata robustezza?
  - la lettura del file xml è proprio il collo di bottiglia?
  - non vale la pena memorizzare le informazioni in un altro formato 
piu' adatto alle letture veloci? .ser? database?


> tramite espressioni regolari?
RM> Mah... se fosse scritto
RM> <tag> 
RM> text 
RM> </tag>
RM> non sono cosi' sicuro che si riesca ad estrarre text con una RE.
Si riesce, si riesce. Ti salva il metasimbolo \s (identico a [ \t\n\r]
ma piů compatto).
Per la cronaca, un buon motivo per usare le regexp (che poi sono la base
degli analizzatori sintattici  usati nel parsing) č non  aver bisogno di
tutto il documento ma solo del valore  di alcuni tag (uh, oh, il caso di
Daniele  - nota  le  regexp che  ho usato  io  sono in  produzione e  le
prestazioni sono niente male, anche  perché ho potuto usare la mappatura
in memoria dei  file, altro vantaggio). In questo  caso tirarsi dietro i
jar per ulteriori librerie che implementano il pezzo da 400mm utilizzato
poi per far fuoco contro le formiche...
Aiuta molto con le regexp un ambiente che ti permetta di verificare al
volo se la regexp č corretta, il fatto poi che abbia una sintassi non 
proprio uguale a quella di Java non č il problema che sembra in quanto
le trasformazioni sono meccaniche.
-- 
 /\           ___                                    Ubuntu: ancient
/___/\_|_|\_|__|___Gian Uberto Lauri_____               African word
  //--\| | \|  |   Integralista GNUslamico            meaning "I can
\/                   e coltivatore diretto               not install
                               di software                   Debian"
a Cesare avrei detto di scrivermi | I would have told Caesar to write
a 
fn...@rat.vg
                    | me at 
fn...@rat.vg

> non sono cosi' sicuro che si riesca ad estrarre text con una RE.
AF> Aggiungo: Se fosse <tag>pippo&lt;pluto</tag> una RE leggerebbe
AF> 	pippo&lt;pluto
AF> ma il valore corretto sarebbe:
AF> 	pippo<pluto
Non  č proprio  vero. Non  č  il valore  che "corretto",  ma quello  che
eventualmente ti serve.
In questo  caso fai  un semplice  search'n'replace :) che  č piů  o meno
quello che fa il parser (anche se a naso il parser lo fa mentre legge il
testo)...


 testo)...
Si ma devi farlo per tutti gli entities possibili: ce ne sono centinaia.
A questo punto perché reinventare la ruota?


 ma piů compatto).
Che non soddisfa lo standard xml alla regola:
 
 
http://www.w3.org/TR/xml11/#sec-line-ends


 ma più compatto).
AF> Che non soddisfa lo standard xml alla regola:
AF> 	
AF> 	
http://www.w3.org/TR/xml11/#sec-line-ends
Grazie della  segnalazione. Basta non  usare \s ma il  gruppo precedente
opportunamente arricchito.


 
Uno strumento ancora piu' potente per un XML e' appunto un parser XML.
Poi non abbiamo informazioni sufficienti. Si tratta di un XML arbitrario 
o puo' fare pesanti assunzioni su di esso? Nel secondo caso puo' pure 
andare un parsing (alla bellebbuona) fatto tramite RE. Ma ho come l'idea 
che il vantaggio prestazionale su SAX sia quasi nullo. A quel punto non 
ha veramente senso.