[c#] Codifica XmlDocument

martedì 16 giugno 2009 - 22.03

Samb1985 Profilo | Junior Member

Come si fa ad assegnare ad un file in formato xml (senza la riga iniziale che specifica la versione/codifica ma solo i tag tipici di un file xml) una versione/codifica che permetta di specificare all'interno dei tag dell' XmlDocument qualsiasi tipo di carattere ?

Ora assegnando il file all' XmlDocument se contiene caratteri speciali come "&" o "°" viene lanciata la XmlException, probabilmente viene assegnata una codifica di default. (Con caratteri "normali" funziona bene)

Ho provato con il seguente codice ma ancora non funziona:

Encoding enc = Encoding.ASCII;
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader sr = new StreamReader(fs,enc);
string response = sr.ReadToEnd();
XmlDocument xml = new XmlDocument();
xml.LoadXml(response);
fs.Close();
sr.Close();

L'eccezione è sempre Xml.XmlException Errore durante l'analisi di EntityName.

aiedail92 Profilo | Expert

Ciao

>Ora assegnando il file all' XmlDocument se contiene caratteri
>speciali come "&" o "°" viene lanciata la XmlException, probabilmente
>viene assegnata una codifica di default. (Con caratteri "normali"
>funziona bene)

Per quanto riguarda il carattere '&' non è questione di codifica: è un carattere speciale dell'xml e pertanto non puoi usarlo nel nome di un elemento:

http://en.wikipedia.org/wiki/Xml#International_use

Forse invece per poter usare il '°' devi specificare nell'xml una codifica adatta, ma non saprei dire con esattezza se e quale...

Luca

Samb1985 Profilo | Junior Member

& non la uso come nome di un elemento ma sta nel contenuto (Es. <tag>abc & avc n°</tag>)

Per il momento forse sono riuscito a risolvere:

Encoding enc = Encoding.UTF8;
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader sr = new StreamReader(fs,enc);
string response = sr.ReadToEnd();
response = response.Replace("&", "&amp;");
XmlDocument xml = new XmlDocument();
xml.LoadXml(response);
fs.Close();
sr.Close();

Spero che tutti gli altri caratteri, escluso &, siano consentiti in un file xml.

aiedail92 Profilo | Expert

Oltre all'&, anche altri caratteri sono riservati, ad esempio maggiore ('>', da sostituire con "&gt;") e minore ('<', da sostituire con "&lt;")...

Luca

Samb1985 Profilo | Junior Member

c'è un link dove vedere tutti gli altri caratteri riservati ?

< e > non posso fare il replace altrimenti mi sostituisce anche quelli relativi ad apertura e chiusura tag.

aiedail92 Profilo | Expert

Dunque, una rapida ricerca su google porta questi risultati:

http://xml.silmaril.ie/authors/specials/
http://www.devx.com/tips/Tip/14068

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5