2010-11-25 21 views
4

Je suis à la recherche d'un moyen de coder un document XML en utilisant le # & 233; codage.XML Unicode Safe Encoding

En utilisant ce code de base

var xmlDoc = new XmlDocument(); 
xmlDoc.Load(@"D:\Temp\XmlDocBase.xml"); 
xmlDoc.Save(@"D:\Temp\XmlDocBaseCopy.xml"); 

mon document Xml passe de:

<?xml version="1.0"?> 
<Tag1> 
    <comment>entit&#233;</comment> 
</Tag1> 

à

<?xml version="1.0"?> 
<Tag1> 
    <comment>entité</comment> 
</Tag1> 

Cordialement

+0

Le code XML est valide dans les deux cas. Une raison particulière pour laquelle vous voulez des entités de caractères au lieu des caractères réels? – Oded

+0

Il s'agit d'interagir avec un outil de génération de documentation (un add-on pour OWL-protégé) et le logiciel génère des caractères À @ style lorsque le XML est dans le second format. Mais vous avez raison, les deux XML sont des XML valides. –

+2

L'add-on suce alors. :-( –

Répondre

4

Vous pouvez forcer l'encodage qui ne supporte pas tous unic des caractères d'ode (c.-à-d. ASCII). En tant que rédacteur de résultat sera forcé d'utiliser des entités.

XmlDocument doc = new XmlDocument(); 
    doc.LoadXml("<Tag1><comment>entit&#233;</comment></Tag1>"); 

    var writer = XmlTextWriter.Create(
     @"c:\temp\o.xml", 
     new XmlWriterSettings { Encoding = System.Text.ASCIIEncoding.ASCII }); 
    doc.Save(writer); 

Résultats dans:

<?xml version="1.0" encoding="us-ascii"?><Tag1><comment>entit&#xE9;</comment></Tag1> 
2

Vous pouvez appeler HttpUtility.HtmlEncode sur une chaîne.

return HttpUtility.HtmlEncode("entité"); 

Retours entit&#233;

HttpUtility fait partie de System.Web.

+0

En XML c'est une référence de caractère et vous ne pouvez pas utiliser directement cette chaîne dans les API XML car le '&' sera échappé une autre fois. – Joey