web-dev-qa-db-ja.com

C#で文字列をXML文字列にデコードする方法

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>
32
user31673
  1. HttpUtility.HtmlDecode from System.Web
  2. WebUtility.HtmlDecode from System.Net
35

HttpUtility.HtmlDecode の代わりに System.Net.WebUtility.HtmlDecode を使用できます

System.Web 参照が不要で、代わりに System.Net が必要な場合に役立ちます。

39
matabares

Kirillおよびmsarchetが言ったように、 HttpUtility.HtmlDecode from System.Web。それはほとんど何でも正しくエスケープします。

参照したくない場合は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;は、サポートが難しい例です。

6
Wernight

エスケープされた文字を元の文字に置き換えるだけです。

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

HttpUtility.HtmlDecode(xmlString)はこの問題を解決します

0
Sharthak Ghosh

HTML.Rawを使用できます。そのようにして、マークアップはエンコードされません。

0
Andrei S