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

47

我有一个字符串(来自CDATA元素),其中包含XML的描述。 我需要将此字符串解码为一个新字符串,以使用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>

但是你现有的字符串是无效的 - naveen
@naveen:当然,那只是字符串的内容... - Jeff Mercado
@Jeff Mercado:我正在使用LinqPad编写答案时发现字符串无效,而HtmlDecode不起作用,因为它只接受string。我只是想指出我们的OP也需要转义" - naveen
7个回答


46

2
谢谢!这真的很方便,因为我想针对.NET 4.0客户端配置文件进行目标设置,但引用System.Web会要求我针对完整的.NET 4.0配置文件进行目标设置。 - Mal Ross

6
Kirillmsarchet 所说,您可以使用来自 System.WebHttpUtility.HtmlDecode。它可以正确地转义几乎任何东西。
如果您不想引用 System.Web,您可以使用一些技巧,支持所有 XML 转义,但不支持 HTML 特定的转义,如&eacute;
public static string XmlDecode(string value) {
    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("<root>" + value + "</root>");
    return xmlDoc.InnerText;
}

您也可以使用正则表达式或简单的string.Replace,但它只支持基本的XML转义。像&#x410;&eacute;这样的内容是更难支持的例子。


我不会使用正则表达式解析XML/HTML:https://dev59.com/questions/X3I-5IYBdhLWcg3wq6do - cederlof
我喜欢XmlDocument方法,加一。 - cederlof

1

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


0

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


1
你能提供一些示例代码来更好地解释你的答案吗? - winhowes

-1
你只需要将转义字符替换为它们的原始字符即可。
string stringWanted= existingString.Replace("&lt;", "<")
                                                   .Replace("&amp;", "&")
                                                   .Replace("&gt;", ">")
                                                   .Replace("&quot;", "\"")
                                                   .Replace("&apos;", "'");

这非常奇怪。我刚刚制作了一个例子来展示问题,而它却完全按照所期望的方式工作。让这件事变得奇怪的是,我“知道”这个确切情况是我维护的代码库中导致 XML 解析错误的原因,而我昨天已经修复了它。至少,我认为它是完全相同的。在我有机会检查之前,我将取消反对票并删除我的原始评论。 - Tom W

-2

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

一旦你得到了结果XDocument,你可以使用ToString将其转换回字符串:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接