Ошибка синтаксического анализа XML: неправильно сформирован - PullRequest
0 голосов
/ 24 ноября 2010

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

}

но в выходных данных это выглядит так: открытие и закрытие тегов узла тегов в & lt и & gt как это исправить?

1 Ответ

1 голос
/ 24 ноября 2010

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

  • &- &amp;
  • <- <code>&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();

Код взят из .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...