XML分析错误:格式不正确

XML分析错误:格式不正确,xml,sharepoint-2007,Xml,Sharepoint 2007,当我试图在sharepoint中打开页面时,会出现上述错误。实际上,我使用了以下代码: protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; Response.Write(GenerateTagCloud()); Response.End(); } private string GenerateTagCloud() { SP

当我试图在sharepoint中打开页面时,会出现上述错误。实际上,我使用了以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    Response.ContentType = "text/xml";
    Response.Write(GenerateTagCloud());
    Response.End();       
}

private string GenerateTagCloud()
{
    SPWeb myweb = null;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        SPSite mysite1 = new SPSite(mysite.ID);
        myweb = mysite1.OpenWeb();
    });

    myweb.AllowUnsafeUpdates = true;

    SPList categories = myweb.Lists["Discussion Categories"];
    SPList discussion = myweb.Lists["Team Discussion"];

    System.Text.StringBuilder sp = new System.Text.StringBuilder();
    //System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

    sp.Append("<?xml version='1.0' encoding='UTF-8'?>");
    sp.Append("<tags>");

    foreach (SPListItem category in categories.Items)
    {            
        string categoryname = category.Name;
        categoryname = categoryname.Replace(" ", "%20");
        sp.Append("<a href='" + myweb.Url + "/Pages/Home.aspx?Discussion=" + categoryname + "' style='font-size: 13.5pt'  color='0x7b7b7b'>" + category.Name + "</a>");
    }
    sp.Append("</tags>");

    myweb.AllowUnsafeUpdates = false;
    return sp.ToString();

}
受保护的无效页面加载(对象发送方,事件参数e)
{
Response.ContentType=“text/xml”;
Write(GenerateTagCloud());
Response.End();
}
私有字符串GenerateTagCloud()
{
SPWeb myweb=null;
SPSecurity.runWithLevelatedPrivileges(委托()
{
SPSite mysite1=新的SPSite(mysite.ID);
myweb=mysite1.OpenWeb();
});
myweb.AllowUnsafeUpdates=true;
SPList categories=myweb.Lists[“讨论类别”];
SPList discussion=myweb.list[“团队讨论”];
System.Text.StringBuilder sp=新的System.Text.StringBuilder();
//System.Xml.XmlDocument doc=new System.Xml.XmlDocument();
sp.Append(“”);
sp.Append(“”);
foreach(categories.Items中的SPListItem类别)
{            
string categoryname=category.Name;
categoryname=categoryname.Replace(“,“%20”);
sp.Append(“”);
}
sp.Append(“”);
myweb.AllowUnsafeUpdates=false;
返回sp.ToString();
}

但在输出中,它显示为:标记<和>中标记节点的打开和关闭。如何更正此问题?

由于问题在于其中一个类别名称中的
&
,因此您只需对其进行转义即可-XML中有五个字符需要转义:

  • &-
    &
  • <-
  • “-
  • '-
    &apos
如果是
&
,只需将其替换为
&

话虽如此,如果您正在编写XML,您应该使用
XmlWriter
,而不是
StringBuilder
——这将正确转义字符,并且不会发生此类错误:

XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data & data");
writer.WriteEndElement();

代码取自。

sp.Append(“);在上面的代码中。它没有在上面的代码中显示您的类别名称是什么?它们是有效的XML吗?sp是什么?它是如何声明的?类别名称是有效的。sp是一个stringbuilder对象。在页面加载中,我编写了response.write(sp);response.end();在开始之前,我是否要添加到stringbuilder对象,以便它可以工作?您如何输出此内容?您可以发布代码吗?