如何在 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】:正如 Kirill 和 msarchet 所说,您可以使用来自 System.Web
的 HttpUtility.HtmlDecode
。它几乎可以正确地转义任何东西。
如果你不想引用System.Web
,你可以使用一些trick,它支持所有 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;
之类的例子很难支持。
【讨论】:
我不会用 RegEx 解析 XML/HTML:***.com/questions/1732348/… (不过我喜欢 XmlDocument 方法)+1【参考方案4】:HttpUtility.HtmlDecode(xmlString)
会解决这个问题
【讨论】:
【参考方案5】:您可以使用 HTML.Raw。这样标记就不会被编码。
【讨论】:
您能否提供一些示例代码来更好地解释您的答案?【参考方案6】:您只需将转义字符替换为其原始字符。
string stringWanted= existingString.Replace("<", "<")
.Replace("&", "&")
.Replace(">", ">")
.Replace(""", "\"")
.Replace("'", "'");
【讨论】:
这很奇怪。我只是 produced an example 我希望证明这个问题,它可以按预期工作。奇怪的是,我知道这个确切的情况是导致我维护的一个代码库中的 XML 解析错误的原因,我维护了 昨天。至少,我认为是完全一样的。在我有机会检查之前,我将取消反对并删除我原来的评论。【参考方案7】:您也可以考虑XDocument 中的静态解析方法。我不确定它与这里提到的其他人相比如何,但它似乎很好地解析了这些字符串。
一旦你得到生成的 XDocument,你就可以用 ToString 来取回字符串:
string parsedString = XDocument.Parse("<My XML />").ToString();
【讨论】:
以上是关于如何在 C# 中将字符串解码为 XML 字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中将“原始”字符串转换为“解码”字符串?