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

Mah*_*pat 24 .net c# xml

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.XmlResolver = null;

    xmldoc.Load("URL");
    XmlWriter xmlWrite = XmlWriter.Create(@Server.MapPath("Test.xml"));
    xmldoc.Save(xmlWrite);
    xmlWrite.Close();
Run Code Online (Sandbox Code Playgroud)

以上是我用来读取XML文件的代码.我加载的XML包含类似的实体nbsp;,因此,代码抛出了一个XMLException:

提及未申报实体'nbsp'

Ram*_*man 53

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

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

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

<!DOCTYPE doctypeName [
   <!ENTITY nbsp "&#160;">
]> 
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*ner 8

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

根据这个有用的论坛帖子,我能够修复此错误.

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

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

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

W3 School的HTML实体参考页面.

关于实体集的官方W3C页面.

  • 当然,但麻烦的是我在一个不同团队建立的网络应用程序中工作,我的选择受到严重限制.他们构建了一个系统,无论出于何种原因,它都可以在HTML和XML之间切换.所以,我适应了.*耸肩* (5认同)
  • 谢谢,迪玛。我已经更新了我的答案以包含 W3C 链接。我认为 W3Schools 链接仍然有用,所以我原封不动地保留了它。 (2认同)