Как декодировать строку в строку XML в C # - PullRequest
32 голосов
/ 20 июля 2011

У меня есть строка (из элемента CDATA), которая содержит описание XML. Мне нужно декодировать эту строку в новую строку, которая отображает символы правильно, используя 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>

Ответы [ 7 ]

39 голосов
/ 16 июня 2014

Вы можете использовать System.Net.WebUtility.HtmlDecode вместо HttpUtility.HtmlDecode

Полезно, если не хотите System.Web ссылка и предпочтение System.Net вместо.

35 голосов
/ 20 июля 2011
  1. HttpUtility.HtmlDecode от System.Web
  2. WebUtility.HtmlDecode от System.Net
6 голосов
/ 09 августа 2012

Как сказал Кирилл и мсархет , вы можете использовать HttpUtility.HtmlDecode из System.Web.Он экранирует почти все правильно.

Если вы не хотите ссылаться на System.Web, вы можете использовать трюк , который поддерживает экранирование всех 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;, являются примерами, которые будет сложнее поддерживать.

1 голос
/ 24 февраля 2015

Вы можете использовать HTML.Raw . Таким образом, разметка не кодируется.

0 голосов
/ 05 апреля 2017

HttpUtility.HtmlDecode(xmlString) решит эту проблему

0 голосов
/ 25 мая 2015

Вам просто нужно заменить символы scaped на их оригиналы.

string stringWanted= existingString.Replace("&lt;", "<")
                                                   .Replace("&amp;", "&")
                                                   .Replace("&gt;", ">")
                                                   .Replace("&quot;", "\"")
                                                   .Replace("&apos;", "'");
0 голосов
/ 19 февраля 2015

Можно также рассмотреть метод статического разбора из XDocument . Я не уверен, как это сравнивается с другими, упомянутыми здесь, но кажется, что эти строки хорошо разбираются.

Как только вы получите получившийся XDocument, вы можете повернуться с помощью ToString, чтобы вернуть строку:

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