web-dev-qa-db-fra.com

Comment décoder une chaîne en chaîne XML en C #

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>
32
user31673
35
Kirill Polishchuk

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.

39
matabares

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 &eacute;:

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 &#x410; ou &eacute; sont des exemples qui seraient plus difficiles à prendre en charge.

6
Wernight

Il vous suffit de remplacer les caractères effacés par leurs originaux.

string stringWanted= existingString.Replace("&lt;", "<")
                                                   .Replace("&amp;", "&")
                                                   .Replace("&gt;", ">")
                                                   .Replace("&quot;", "\"")
                                                   .Replace("&apos;", "'");
0
Alex Jolig

HttpUtility.HtmlDecode(xmlString) résoudra ce problème

0
Sharthak Ghosh

Vous pouvez utiliser HTML.Raw. De cette façon, le balisage n'est pas codé.

0
Andrei S