J'ai une chaîne (d'un élément CDATA) qui contient une description de XML. J'ai besoin de décoder cette chaîne en une nouvelle chaîne qui affiche correctement les caractères en utilisant C #
Chaîne existante:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><myreport xmlns="http://test.com/rules/client"><admin><ordernumber>123</ordernumber><state>NY</state></report></myreport>
Chaîne recherchée:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myreport xmlns="http://test.com/rules/client">
<admin><ordernumber>123</ordernumber><state>NY</state></report></myreport>
HttpUtility.HtmlDecode
de System.Web
WebUtility.HtmlDecode
de System.Net
Vous pouvez utiliser System.Net.WebUtility.HtmlDecode au lieu de HttpUtility.HtmlDecode
Utile si vous ne voulez pas System.Web référence et préférez System.Net à la place.
Comme Kirill et msarchet, vous pouvez utiliser HttpUtility.HtmlDecode
de System.Web
. Il échappe à peu près à tout correctement.
Si vous ne voulez pas faire référence à System.Web
vous pouvez utiliser une astuce qui prend en charge tous les échappements XML mais pas les échappements spécifiques à HTML comme é
:
public static string XmlDecode(string value) {
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<root>" + value + "</root>");
return xmlDoc.InnerText;
}
Vous pouvez également utiliser un RegEx ou un simple string.Replace
mais il ne prendrait en charge que l'échappement XML de base. Des choses comme А
ou é
sont des exemples qui seraient plus difficiles à prendre en charge.
Il vous suffit de remplacer les caractères effacés par leurs originaux.
string stringWanted= existingString.Replace("<", "<")
.Replace("&", "&")
.Replace(">", ">")
.Replace(""", "\"")
.Replace("'", "'");
HttpUtility.HtmlDecode(xmlString)
résoudra ce problème
Vous pouvez utiliser HTML.Raw. De cette façon, le balisage n'est pas codé.