【问题标题】:How to decode string to XML string in C#如何在 C# 中将字符串解码为 XML 字符串
【发布时间】: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 也需要转义 "

标签: c# .net xml xml-serialization


【解决方案1】:
  1. HttpUtility.HtmlDecode 来自System.Web
  2. 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; 之类的例子很难支持。

    【讨论】:

    【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-09
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多