更多XML问题 - 未申报实体'nbsp'

时间:2010-05-12 08:41:49

标签: c# xml xslt

我收到了错误:

  

第49行:xml = r.ReadToEnd();   第50行:   第51行:System.Xml.Linq.XDocument xmlDoc = System.Xml.Linq.XDocument.Parse(xml);   第52行:
  第53行:var query = from x in xmlDoc.Descendants(“member”)

在我的XML上。当我运行代码在空页面中生成XML时,它运行没有错误,如果我在我的网页中调用代码它会抛出此错误。页面上唯一的'nbsp'是XSLT顶部的doctype声明:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>

我不知道这个错误来自哪里,我正在寻找建议!

感谢。

以下是提取XML的C#代码:

protected void exportList(Object sender, EventArgs e)
    {
        String gid;
        gid = Request.QueryString["gid"].ToString();
        //XElement xml = XElement.Load("/members/listmembersxmlfeed?gid=" + gid);

        String xml = String.Empty;

        System.Net.WebResponse WR = System.Net.WebRequest.Create(Request.Url + "/members/listmembersxmlfeed?gid=" + gid).GetResponse();

        System.IO.StreamReader r = new System.IO.StreamReader(WR.GetResponseStream());
        xml = r.ReadToEnd();

        System.Xml.Linq.XDocument xmlDoc = System.Xml.Linq.XDocument.Parse(xml);

            var query = from p in xmlDoc.Descendants("member")
                    select new
                    {
                        Name = p.Element("name").Value,
                        Email = p.Element("email").Value
                    };

            foreach (var member in query)
            {
                    Response.Write("Employee: " + member.Name + " " + member.Email + "<br />");
            }
    }

希望得到这个帮助。

2 个答案:

答案 0 :(得分:8)

您的XML文档必须有一个DTD声明@nbsp;实体

<!DOCTYPE topElementName [ <!ENTITY nbsp "&#x00A0;"> ]> 

否则,文本不是格式良好的XML文档(包含未定义的实体),错误消息告诉您。

XSLT样式表具有此声明的事实仅适用于XSLT样式表。 XML文档

也需要单独声明

答案 1 :(得分:-2)

将WebRequest.Create更改为静态URL而不是Request.Uri +“/ listmembersxmlfeed?gid =”+ gid,这解决了它。