.NET XML 无助于解析保存时的实体

标签 .net xml vb.net encoding entities

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

最佳答案

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/

相关文章:

javascript - 如何将新元素插入到 'this' 子元素 Jquery?

vb.net - 在 Ultragrid 列过滤器中显示日历

jquery - Return PartialView ("view", model) 与 Ajax 正在更新标签,但不是文本框,即使对于相同的属性

C# 到 VB.Net 问题

.net - 从 Winforms 迁移到 WPF

c# - 为什么我不能在 C# 中使用抽象静态方法?

c# - 异常或 If/Else 语句

.net - 在 64 位环境中使用 32 位程序集

xml - XPath:选择一个节点而不获取其子节点

javascript - 将XML中的Web数据传递到SQL Server数据库的明智方法