Ответ 1
-
HttpUtility.HtmlDecode
fromSystem.Web
-
WebUtility.HtmlDecode
изSystem.Net
У меня есть строка (из элемента CDATA), которая содержит описание XML. Мне нужно декодировать эту строку в новую строку, которая корректно отображает символы, используя С#
Существующая строка:
<?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>
Требуется String:
<?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>
HttpUtility.HtmlDecode
from System.Web
WebUtility.HtmlDecode
из System.Net
Вы можете использовать System.Net.WebUtility.HtmlDecode вместо HttpUtility.HtmlDecode
Полезно, если вы не хотите System.Web ссылку и предпочитаете System.Net.
Как сказал Кирилл и msarchet, вы можете использовать HttpUtility.HtmlDecode
от System.Web
. Это почти ничего не выходит.
Если вы не хотите ссылаться на System.Web
, вы можете использовать некоторый трюк , который поддерживает все экранирование XML, но не экранирование, специфичное для HTML, например é
:
public static string XmlDecode(string value) {
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<root>" + value + "</root>");
return xmlDoc.InnerText;
}
Вы также можете использовать RegEx или простой string.Replace
, но он будет поддерживать только поддержку XML-экранирования. Такие вещи, как А
или é
, являются примерами, которые сложнее поддерживать.
Вы можете использовать HTML.Raw. Таким образом, разметка не закодирована.
Вам просто нужно заменить скопированные символы на свои оригиналы.
string stringWanted= existingString.Replace("<", "<")
.Replace("&", "&")
.Replace(">", ">")
.Replace(""", "\"")
.Replace("'", "'");
HttpUtility.HtmlDecode(xmlString)
решит эту проблему
Вы также можете рассмотреть метод статического анализа из XDocument. Я не уверен, как он сравнивается с другими, упомянутыми здесь, но, похоже, хорошо разбирает эти строки.
Как только вы получите полученный XDocument, вы можете обратиться к ToString, чтобы вернуть строку:
string parsedString = XDocument.Parse("<My XML />").ToString();