Questa non è una richiesta, ma solo un'evidenziazione del problema, a cui ho posto rimedio, e la posto qui, in modo da renderla pubblica.
In questo periodo ho avuto modo di riscontrare un problema, già segnalato al team di Gambas, relativo alla libreria gb.xml, in particolare della classe XmlReader.
Comunque il problema è il seguente, ed è relativo solo agli elementi di un documento xml, non degli attributi:
Nella costruzione di un elemento (o tag), si può procedere un due diversi modi:
a) nel primo caso, se il tag non contiene informazioni utili, viene chiuso su sè stesso, inserendo il carattere slash (/) prima della chiusura del tag stesso (>);
b) nel secondo caso, che come nel primo non contiene dati utili, viene usato il meccanismo dei [apri tag] e [chiudi tag], delimitati dai caratteri di maggiore/minore (< e >).
Un documento xml può contenere un numero indefinito di elementi, ognuno dei quali, a sua volta, ne può contenere degli altri, e così via, come ad esempio:
<Root>
<Elemento1>
<SottoElemento1>
<SottoSottoElemento1>
</SottoSottoElemento1>
</SottoElemento1>
</Elemento1>
</Root>
La classe XmlReader permette di leggere questa struttura ad albero, attraverso le sue classi: XmlDocument, XmlElement e XmlAttribute.
In realtà, questo dipende da come il documento è stato scritto:
Esempio A:
----------
<Root>
<Elemento1>
<SottoElemento1>
<SottoSottoElemento1 />
</SottoElemento1>
</Elemento1>
</Root>
Esempio B:
----------
<Root>
<Elemento1>
<SottoElemento1>
<SottoSottoElemento1>
</SottoSottoElemento1>
</SottoElemento1>
</Elemento1>
</Root>
Tutte e due gli esempi riportano una struttura, senza dati, ma con una differenza sostanziale; nell'esempio A l'elemento "SottoSottoElemento1" viene chiuso nello stesso tag, mentre nell'esempio B lo stesso elemento viene chiuso in maniera diversa.
Ora il problema: se usiamo XmlReader per leggere il documento, nel primo caso la libreria non riesce a capire se il successivo elemento (SottoElemento1) è un sottoelemento del precedente (SottoSottoElemento1), o se è a pari livello, o addirittura è suo padre. Questo ovviamente, fà saltare la gerarchia, per cui in una funzione di lettura, non potremmo determinare la reale struttura del file.
Soluzione: l'esempio B è la soluzione, ovvero è necessario che i tag vengano aperti e chiusi in modo distinto.
A giorni cercherò di descrivere più in dettaglio la libreria sul wiki, compresi questo e altri suggerimenti. Spero solo che la mia spiegazione in questo post, sia stata abbastanza esauriente.
Ciao!