Ошибка синтаксического анализа XML: неправильно сформирован

Когда я пытаюсь открыть страницу в 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();

}

но в выходных данных это выглядит как: открытие и закрытие тегов узла тегов в < и >. как это исправить?

1 ответ

Решение

Так как проблема с & в одном из названий категорий все, что вам нужно сделать, это экранировать его - в XML нужно экранировать пять символов:

  • & - &amp;
  • <- &lt;
    • &gt;
  • "- &quot;
  • '- &apos;

В случае &просто замените его на &amp;,

Сказав это, если вы пишете XML, вы должны использовать XmlWriter и не StringBuilder - это будет корректно экранировать символы, и такого рода ошибки не возникнут:

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

Код взят отсюда.

Другие вопросы по тегам