Экранирование HTML и XML тесно связаны.как вы сказали, HttpUtility
имеет методы HtmlEncode
и HtmlDecode
.Они также будут работать с XML, поскольку есть только несколько сущностей, которые необходимо экранировать: <
, >
, \
, '
и &
в HTML и XML.
Недостатком использования HttpUtility
класса является то, что вам нужна ссылка на System.Web
dll, которая также содержит много других вещей, которые вам, вероятно, не нужны.
Специально для XML, *Класс 1021 *SecurityElement
имеет метод Escape
, который выполняет кодирование, но не имеет соответствующего метода Unescape
.Поэтому у вас есть несколько вариантов:
- , используйте
HttpUtility.HtmlDecode()
и мириться со ссылкой на System.Web
свернуть ваш собственный метод декодирования, который заботится оспециальные символы (так как их всего несколько - посмотрите на статический конструктор SecurityElement
в Reflector, чтобы увидеть полный список)
используйте (хакерское) решение, например:
.
public static string Unescape(string text)
{
XmlDocument doc = new XmlDocument();
string xml = string.Format("<dummy>{0}</dummy>", text);
doc.LoadXml(xml);
return doc.DocumentElement.InnerText;
}
Лично я бы использовал HttpUtility.HtmlDecode()
, если у меня уже была ссылка на System.Web
, или бросил бы свою собственную, если нет.Мне не нравится ваш XmlReader
подход, поскольку он Disposable
, который обычно указывает на то, что он использует ресурсы, которые необходимо утилизировать, и поэтому может быть дорогостоящей операцией.