Ошибка синтаксического анализа 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 нужно экранировать пять символов:
- & -
&
- <-
<
>
- "-
"
- '-
'
В случае &
просто замените его на &
,
Сказав это, если вы пишете XML, вы должны использовать XmlWriter
и не StringBuilder
- это будет корректно экранировать символы, и такого рода ошибки не возникнут:
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data & data");
writer.WriteEndElement();
Код взят отсюда.