Как я могу вывести XML из кода в файл ASPX?
Мне нужно вывести XML / ASX на странице ASPX. XML генерируется из кода и будет выглядеть следующим образом.
Я использую строитель строк для создания XML / ASX.
(...)
sb.AppendLine("<asx version='3.0'>");
sb.AppendLine("<title> Spilliste </title>");
while (i < pdc.Count)
{
sb.AppendLine("<entry>");
sb.AppendLine("<title>" + pdc[i].PageName + "</title>");
sb.AppendLine("<abstract> Ikke tilgjengelig</abstract>");
sb.AppendLine("<ref>" + pdc[i].LinkURL + "</ref>");
sb.AppendLine("</entry>");
i++;
}
sb.AppendLine("</asx>");
return sb.ToString();
(...)
Но как я могу вывести это?
Response.Write
не работает из кода позади. И я известен, чтобы использовать <asp:label>
в файле ASPX, потому что он должен быть размещен в тегах. У меня в основном есть пустая страница ASPX.
Что делать?
4 ответа
Не используйте Page
за это. В принципе Page
s для рендеринга HTML. Если вы хотите отправить XML или изображения или любой другой тип данных по этому вопросу, вы должны использовать файл.ashx и и класс, который реализует IHttpHandler
,
Вы можете увидеть этот пример о том, как реализовать интерфейс.
Response.ClearHeaders();
Response.ContentType = "text/xml;charset=UTF-8";
string xmlString = "<aaa>sai</aaa>";
Response.Write(xmlString);
Response.End();
Response.Write должен работать из кода позади:
Response.Write("some test");
Response.Flush();
Но вы должны выполнить этот код в методе Page_Load. Вы должны подготовить отдельную страницу aspx для генерации xml и перенаправить пользователя на эту страницу. Эта страница должна быть пустой (только <%@ ... %>
в файле aspx).
Вы должны использовать IHttpHandler
для этого - вы можете настроить, какие URL он обрабатывает, либо создав файл.ashx(очень простой), либо зарегистрировав их в файлеweb.config, который более гибкий, но более сложный, поскольку синтаксис различается между классическим и интегрированным режимами IIS.
Затем вам понадобится простой класс с одним важным членом - методом ProcessRequest, принимающим только один параметр - HttpContext.
Кроме того, избегайте использования StringBuilder для создания XML. Вместо этого вы можете использовать более безопасные и более гибкие классы linq to xml: использование этого безопасного типа также облегчает написание вспомогательных методов для правильной генерации частей дерева xml; и вы можете запросить и преобразовать результаты для загрузки.
void ProcessRequest(HttpContext context) {
var pdc = Enumerable.Range(0,10).Select(
i=>new{PageName="Page"+i,LinkURL="Link"+i});
var xmlString =
new XElement("asx",
new XAttribute("version","3.0"),
new XElement("title","Spilliste"),
pdc.Select(pdcElem=>
new XElement("entry",
new XElement("title",pdcElem.PageName),
new XElement("abstract","Ikke tilgjengelig"),
new XElement("ref",pdcElem.LinkURL)
)
)
).ToString(SaveOptions.DisableFormatting);
//don't forget to handle headers and set things like content-type too!
context.Response.Write(xmlString);
}
Причина, по которой этот подход лучше взлома файла.aspx, заключается в том, что, хотя это возможно в файле.aspx, вам придется бороться с фреймворком, чтобы получить его - на вашем пути будет целый набор инфраструктуры, возможно, слегка искажающий Ваш вывод, прежде чем он достигнет клиента. Самый простой способ избавиться от этого - использовать более простой обработчик, который специально не предназначен для размещения элементов управления aspx и генерации HTML.