Le seguenti istruzioni effettuano correttamente il parser di un file XML, utilizzando la libreria XmlSax
L'inizio del file XML è il seguente :
B4X:
in = File.OpenInput(File.DirRootExternal, Main.FileXML)
parserOre.Parse(in, "ParserOre")
in.Close
L'inizio del file XML è il seguente :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TABLE nom="Attività">
<Attivita numero="1">
<Numero>1</Numero>
<DURATA>1h00</DURATA>
<FREQUENZA>S</FREQUENZA>
<MAT_COD>MATE</MAT_COD>
<MAT_NOME>MATEMATICA</MAT_NOME>
<DOC_COGN>residue</DOC_COGN>
<DOC_NOME>MATE</DOC_NOME>
<CLASSE>1B TD02</CLASSE>
<AULA/>
<PERIODICITA>S</PERIODICITA>
<SPECIFICA>ss</SPECIFICA>
<CO-DOC.>N</CO-DOC.>
<COEFF.>60/60</COEFF.>
<GIORNO>lunedì</GIORNO>
<O.INIZIO>08h00</O.INIZIO>
<SEDE/>
<ALUNNI>0</ALUNNI>
<Attivita numero="2">
<Numero>2</Numero>
<DURATA>1h00</DURATA>
<FREQUENZA>S</FREQUENZA>
</Attivita>
Viceversa se sottopongo allo stesso codice un altro file XML, il seguente :
<?xml version='1.0' encoding='us-ascii' ?>
<TIMETABLE>
<LESSON>
<DURATION value="6:00"/>
<SUBJECT value="LAB. CUC."/>
<SITE value="SAN PAOLO"/>
<MODULE value="MAIORANA CASAMASSIMA"/>
<TEACHER value="Corriero Antonio"/>
<GROUP value="3AEsp"/>
<ROOM value="LAB CUCINA A"/>
<DAY value="LUN"/>
<TIME value="8:15"/>
</LESSON>
<LESSON>
<DURATION value="2:00"/>
<SUBJECT value="MATEMATICA"/>
<SITE value="SAN PAOLO"/>
<MODULE value="MAJORANA SAN PAOLO"/>
<TEACHER value="Milella Sabina"/>
<GROUP value="ot5Asp"/>
<DAY value="LUN"/>
<TIME value="8:15"/>
</LESSON>
<LESSON>
<DURATION value="1:00"/>
ovviamente adattando i codice (ad esempio sostituendo TEACHER con DOC_COGN) ricevo un errore in una linea in cui c'è un docente con una lettera accentata (<TEACHER value="Imbò S******"/>). Guarda caso.
Ritenendo che ciò fosse dovuto ad un errato encoding ho adattato il codice nel seguente modo
Come riuscire a leggere correttamente questo tipo di file XML ?B4X:Dim Inp8 As InputStream Inp8 = File.OpenInput(File.DirRootExternal, Main.FileXML) Dim tr As TextReader 'tr.Initialize2(Inp8, "iso-8859-1") tr.Initialize2(Inp8, "US-ASCII") parserOre.Parse2(tr, "ParserOre") tr.Close
Grazie per l'attenzione