699 messaggi dal 18 febbraio 2002
www.dimsolutions.it
Salve a tutti,
ho la seguente procedura che non vorrei modificare o per lo meno non completamente. Legge un file XML di terze parti di circa 300Mb. Funziona tutto bene, delle volte succede che su questo file in qualche record c'è qualche errore tipo l'attributo "Product_ID" ripetuto la procedura giustamente va in errore terminando... vorrei però che prosegua al record successivo come posso fare ciò integrando qualche cosa in questo codice?

try
{
xml = new XmlTextReader(url);

while (xml.Read())
{
// se è un nodo
if (xml.NodeType == XmlNodeType.Element)
{
// in xml.Name c'è il nome del nodo
if (xml.Name == "file")
{
product_ID = xml.GetAttribute("Product_ID").Trim().ToString();
prod_id = xml.GetAttribute("Prod_ID").Trim().ToString();

}

}

}
catch (Exception e)
{
// scrivo log
retOp = false;
}
finally
{
if (xml != null) { xml.Close(); xml = null; }
}
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
qui il problema è che se l'XmlTextReader incontra un elemento con errori, non sarà più disponibile a continuare la lettura dell'elemento successivo, neanche catturando l'eccezione.

Ovviamente, la cosa migliore sarebbe chiedere al produttore di fornire un documento XML valido.

Se questo non è possibile, bisogna arrangiarsi. Se non hai già trovato una soluzione elegante, potresti ricorrere ad una tua classe che deriva da StreamReader e passarne un'istanza al costruttore di XmlTextReader.
Quando l'XmlTextReader invocherà il metodo Read del tuo StreamReader per ottenere dei dati, tu avrai l'opportunità di sistemare le eventuali imprecisioni che ti arrivano dal file XML. E' un po' un lavoraccio.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.