如何在C#中解码字符串到XML字符串

时间:2011-07-20 04:29:23

标签: c# .net xml xml-serialization

我有一个包含XML描述的字符串(来自CDATA元素)。我需要将此字符串解码为一个新字符串,该字符串使用C#

正确显示字符

现有字符串:

<?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>

字符串通缉:

<?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>

7 个答案:

答案 0 :(得分:38)

您可以使用System.Net.WebUtility.HtmlDecode代替HttpUtility.HtmlDecode

如果您不想要System.Web引用并且更喜欢System.Net,则非常有用。

答案 1 :(得分:33)

看看:

    来自System.Web
  1. HttpUtility.HtmlDecode 来自System.Net
  2. WebUtility.HtmlDecode

答案 2 :(得分:6)

Kirill msarchet 所述,您可以使用System.Web中的HttpUtility.HtmlDecode。它几乎可以正常逃脱。

如果您不想引用System.Web,可以使用一些技巧,它支持所有XML转义但不支持特定于HTML的转义,如&eacute;

public static string XmlDecode(string value) {
    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("<root>" + value + "</root>");
    return xmlDoc.InnerText;
}

您还可以使用 RegEx 或简单string.Replace,但它只支持基本的XML转义。像&#x410;&eacute;这样的例子是难以支持的例子。

答案 3 :(得分:1)

您可以使用 HTML.Raw 。这样就不会对标记进行编码。

答案 4 :(得分:0)

您只需要将原始人物替换为原始人物。

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

答案 5 :(得分:0)

HttpUtility.HtmlDecode(xmlString)将解决此问题

答案 6 :(得分:-1)

您也可以考虑XDocument中的静态解析方法。我不确定它与这里提到的其他人相比如何,但它似乎很好地解析了这些字符串。

获得生成的XDocument后,您可以使用ToString转回来获取字符串:

string parsedString = XDocument.Parse("<My XML />").ToString();