venerdì 26 novembre 2010

From string to stream...

Alcune situazioni sembrano davvero fatte per rendere le cose complesse..

Vi porto quest'esmpio atto ad un processo di validazione di un testo XML.
Questo è contenuto in una string che è passata a questo metodo come
parametro.

In un primo momento mi è sembrato corretto affrontare la soluzione così.

XmlReaderSettings xmlSettings = new XmlReaderSettings();
xmlSettings.Schemas.Add("http://cSharp.org", Path.Combine(_xmlRequestPath, ValidatorFileName));
xmlSettings.ValidationType = ValidationType.Schema;

XmlReader xR = XmlReader.Create(dataDocument, xmlSettings);

Tuttavia questa soluzione propone un errore che sembra davvero incomprensibile ..
"CARATTERI NON VALIDI NEL PERCORSO"...
Già perchè utilizzando il metodo XmlReader.Create(string,XmlSettings) ci si che per il
primo parametro non ci sia il nudo e crudo XML .. ma il percorso

Acc.. ma io non ho il percorso ho una stringa...

A questo punto dopo aver letto le varie firme di XmlReader.Create scopro che si può
utilizzare uno stream ... e quindi non rimane altro che convertire una
stringa in Stream.

Efficace e di concetto c'e' il memory stream certo magari occupa un po di ram,
ma è sempre meglio che ipotizzare di salvarsi il file in una cartella temporanea,
accedervi e cancellarlo...

XmlReaderSettings xmlSettings = new XmlReaderSettings();
xmlSettings.Schemas.Add("http://cSharp.org", Path.Combine(_xmlRequestPath, ValidatorFileName));
xmlSettings.ValidationType = ValidationType.Schema;

MemoryStream msx = new MemoryStream(Encoding.UTF8.GetBytes(dataDocument));

XmlReader xR = XmlReader.Create(msx, xmlSettings);

E' chiaro che msx dovrà essere messo a null non appena non servirà più ...

Nessun commento: