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

本文关键字:字符串 XML 解码 | 更新日期: 2023-09-27 18:02:55

我有一个包含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>

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

  1. HttpUtility.HtmlDecode from System.Web
  2. WebUtility.HtmlDecode from System.Net

你可以使用System.Net.WebUtility.HtmlDecode来代替HttpUtility。HtmlDecode

如果您不需要System,可以使用。Web参考和首选系统。净。

正如Kirillmsarchet所说,可以从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;这样的例子将更难支持。

HttpUtility.HtmlDecode(xmlString)会解决这个问题

可以使用HTML.Raw。这样标记就不会被编码。

您只需要将转义字符替换为原始字符。

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

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

得到结果XDocument后,可以使用ToString返回字符串:

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