【问题标题】:Reference to undeclared entity 'nbsp' while reading xml from URL in c#?在 c# 中从 URL 读取 xml 时引用未声明的实体“nbsp”?
【发布时间】:2020-03-13 02:28:41
【问题描述】:
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.XmlResolver = null;

    xmldoc.Load("URL");
    XmlWriter xmlWrite = XmlWriter.Create(@Server.MapPath("Test.xml"));
    xmldoc.Save(xmlWrite);
    xmlWrite.Close();

上面是我用来读取 XML 文件的代码。我正在加载的 XML 包含像 nbsp; 这样的实体,因此,代码会抛出 XMLException:

对未声明实体“nbsp”的引用

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    有两种方法可以处理此问题,但对于这两种方法,您都需要对输入文件进行更改。

    1) 在输入文件中将  更改为 。使用 Unicode 并避免 XML 文档中的可读实体总是更好。使用纯 Unicode 字符或其数字形式。

    2) 如果您仍然需要/想要使用  您可以在将为您进行转换的文件中声明一个自定义文档类型:

    <!DOCTYPE doctypeName [
       <!ENTITY nbsp "&#160;">
    ]> 
    

    这个问题的出现是因为&amp;nbsp; 不是 XML 预定义实体之一。

    【讨论】:

    • 当一个人想要输出一个带有实际   的文件时在 C# 中并重新阅读它,必须在输出中使用xmlDoc.AppendChild(xmlDoc.CreateDocumentType("xyzdoc", null, null, "&lt;!ENTITY nbsp '&amp;amp;' &gt;"));(扩展字符串以设置更多实体)
    【解决方案2】:

    我今天遇到了同样的问题,我能够通过将 HTML 实体名称更改为 HTML 实体编号来解决它。

    根据this helpful forum post,我能够修复此错误。

    HTML 实体名称在 XML 中没有得到很好的支持。这就是为什么“不间断空格”——“nbsp”——会触发这个令人沮丧的错误。

    解决此问题的最简单方法是使用 HTML 实体编号,这意味着将 &amp;nbsp; 更改为 &amp;#160;

    有关名称和编号的 HTML 实体的完整列表,请参阅:

    W3 School's HTML Entity reference page.

    Official W3C Page on Entity Sets.

    【讨论】:

    • 您没有想到 HTML 命名实体可能是 HTML 事物,因此与 XML? ;-)
    • 当然,但问题是我正在使用另一个团队构建的网络应用程序,我的选择受到严重限制。无论出于何种原因,他们构建了一个在 HTML 和 XML 之间切换的系统。所以,我适应了。 耸耸肩
    • 请不要使用 W3 School 作为参考——这不是官方来源。而是使用实体的官方来源:w3.org/TR/xhtml1/dtds.html#h-A2
    • 谢谢,迪玛。我已经更新了我的答案以包含 W3C 链接。我认为 W3Schools 链接仍然有用,所以我保持原样。
    【解决方案3】:

    晚了,但如果您不想记住 &amp;#160; 的含义,也可以将 &amp;nbsp 替换为 &amp;amp;nbsp;

    【讨论】:

    • 那改变了文字的意思,不像改成 
    猜你喜欢
    • 2019-01-03
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2010-09-21
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多