.NET XML бесполезно разрешает сущности при сохранении - PullRequest
3 голосов
/ 09 августа 2010

У меня есть простой XML-файл, например, так:

<?xml version="1.0" encoding="UTF-8"?>
<foo attr="blah &#176; blah"/>

Когда я загружаю его в .NET XmlDocument и выдаю команду Сохранить, т.е.:

xmlDoc = New XmlDocument()
xmlDoc.Load("c:\temp\bar.xml")
xmlDoc.Save("c:\temp\bad.xml")

новый файл XMLсодержит разрешенный усилитель 176 (знак степени).Это затем разрушает последний черный ящик, в который я пытаюсь загрузить XML.

Я пытался поиграть с кодировкой, чтобы получить небольшой эффект.Может ли синтаксический анализатор просто повторить то, что вошло, без разрешения сущностей?Интересно, что это не решает & # 176;

1 Ответ

1 голос
/ 10 августа 2010

XmlDocument Load освобождает персонажей, также играет с ними и не может найти какое-либо простое решение о том, как остановить это поведение.

маленький хак будет делать что-то подобное

foreach (XmlNode xn in xdoc.SelectNodes("descendant-or-self::*"))
{
  foreach(XmlAttribute attr in xn.Attributes)
  {
    string val = System.Web.HttpUtility.HtmlEncode(attr.Value);
    attr.Value = val;
  }
  if (!xn.InnerXml.Contains("<"))
  {
    string val = System.Web.HttpUtility.HtmlEncode(xn.InnerText);
    xn.InnerText = val;
  }
}

перед вами .Save ();это лучшее, что я мог придумать, не используя всю неделю на этом.

...