【问题标题】:.NET XML unhelpfully resolves entities on Save.NET XML 无法解决保存时的实体
【发布时间】:2011-03-27 06:00:23
【问题描述】:

我有一个简单的 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;

【问题讨论】:

    标签: .net xml vb.net encoding entities


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

    【讨论】:

    • 这很有趣。最后,我选择了 &#176;因为这是由我的黑盒应用程序正确保存和加载的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多