我有一个像这样的简单 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<foo attr="blah ° blah"/>
当我将其加载到 .NET XmlDocument 并发出保存时,即:
xmlDoc = New XmlDocument()
xmlDoc.Load("c:\temp\bar.xml")
xmlDoc.Save("c:\temp\bad.xml")
新的 XML 文件包含已解析的放大器 176(度数符号)。这然后打破了我试图将 XML 加载到的最后一个黑盒子。
我试过使用编码,但收效甚微。解析器是否可以只回显进来的内容,而不解析实体?有趣的是,它没有解决 °
最佳答案
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();之前 这是我在不花费整个星期的情况下所能想到的最好的办法。
关于.NET XML 无助于解析保存时的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439454/