在c#中从URL读取xml时引用未声明的实体'nbsp'?

时间:2013-03-29 10:46:51

标签: c# .net xml

    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'

3 个答案:

答案 0 :(得分:50)

有两种方法可以解决这个问题,但是你需要对输入文件进行更改。

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

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

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

此问题即将发生,因为&nbsp;不是XML预定义实体之一。

答案 1 :(得分:8)

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

根据this helpful forum post,我能够解决此错误。

XML中不支持HTML实体名称。这就是为什么“不间断的空间” - “nbsp” - 触发了这个令人沮丧的错误。

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

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

W3 School's HTML Entity reference page

Official W3C Page on Entity Sets

答案 2 :(得分:0)

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