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

Posted

技术标签:

【中文标题】如何在 C# 中将字符串解码为 XML 字符串【英文标题】:How to decode string to XML string in C# 【发布时间】:2011-10-09 01:53:25 【问题描述】:

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

【问题讨论】:

但您现有的字符串是无效 @naveen: 当然这只是字符串的 contents... @Jeff Mercado:当我看到字符串无效并且htmlDecode 接受string 时,我正在使用linqpad 编写答案。是 merley 指出我们的 OP 也需要转义 " 【参考方案1】:
    HttpUtility.HtmlDecode 来自System.Web WebUtility.HtmlDecode 来自System.Net

【讨论】:

【参考方案2】:

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

如果您不想参考 System.Web 而更喜欢 System.Net,则很有用。

【讨论】:

谢谢!这真的很方便,因为我想以 .NET 4.0 客户端配置文件为目标,但引用 System.Web 将要求我以完整的 .NET 4.0 配置文件为目标。【参考方案3】:

正如 Kirillmsarchet 所说,您可以使用来自 System.WebHttpUtility.HtmlDecode。它几乎可以正确地转义任何东西。

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

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

您也可以使用 RegEx 或简单的string.Replace,但它只支持基本的 XML 转义。 &amp;#x410;&amp;eacute; 之类的例子很难支持。

【讨论】:

我不会用 RegEx 解析 XML/HTML:***.com/questions/1732348/… (不过我喜欢 XmlDocument 方法)+1【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

您能否提供一些示例代码来更好地解释您的答案?【参考方案6】:

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

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

【讨论】:

这很奇怪。我只是 produced an example 我希望证明这个问题,它可以按预期工作。奇怪的是,我知道这个确切的情况是导致我维护的一个代码库中的 XML 解析错误的原因,我维护了 昨天。至少,我认为是完全一样的。在我有机会检查之前,我将取消反对并删除我原来的评论。【参考方案7】:

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

一旦你得到生成的 XDocument,你就可以用 ToString 来取回字符串:

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

【讨论】:

以上是关于如何在 C# 中将字符串解码为 XML 字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 Base64 字节数组解码为图像

如何在 Python 中将“原始”字符串转换为“解码”字符串?

如何在 Java 中将 xsl 应用于 xml

如何在打字稿快递服务器中将字符串解码/编码为base64

如何在python中将dbus.Array从at解码为十六进制或字符串

如何在 C# 中解码 HTML 字符?