3

我有一个简单的 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 文件包含已解析的 amp 176(度数符号)。然后,这会破坏我尝试将 XML 加载到的最后一个黑匣子。

我试过玩编码,效果不大。解析器是否有可能只回显输入的内容,而不解析实体?有趣的是,它没有解决 &#176;

4

1 回答 1

1

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(); 这是我能想出的最好的办法,而不用整整一周。

于 2010-08-10T02:01:36.023 回答