如何从ASPX文件中的代码输出XML?

时间:2010-02-19 11:29:37

标签: .net xml c#-3.0 asx

我需要在ASPX页面上输出XML / ASX。 XML是从后面的代码生成的,将look like this

我正在使用字符串构建器来创建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无法使用代码。我很想在ASPX文件中使用<asp:label>,因为它需要放在标签中。我基本上有一个空白的ASPX页面。

怎么办?

4 个答案:

答案 0 :(得分:4)

请勿使用Page。基本上Page用于渲染html。如果您想发送xml或图像或​​任何其他类型的数据,您应该使用.ashx文件和实现IHttpHandler的类。

您可以看到有关如何实施界面的this example

答案 1 :(得分:0)

Response.Write应该来自代码:

  Response.Write("some test");
  Response.Flush();

但是你应该在Page_Load方法中执行这段代码。 您应该准备单独的aspx页面来生成xml并重定向用户该页面。此页面应为空(在aspx文件中只有<%@ ... %>)。

答案 2 :(得分:0)

您应该使用IHttpHandler - 您可以通过making an .ashx file(非常简单)或registering them in the web.config file来配置它处理 的网址,这是更灵活,但由于经典和集成模式IIS之间的语法各种各样棘手。

然后,你需要一个带有一个重要成员的简单类 - 一个只接受一个参数的ProcessRequest方法 - HttpContext。

此外,避免使用StringBuilder来构建XML。你可以使用更安全,更灵活的linq到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。

答案 3 :(得分:0)

    Response.ClearHeaders();
    Response.ContentType = "text/xml;charset=UTF-8";
    string xmlString = "<aaa>sai</aaa>";
    Response.Write(xmlString);
    Response.End();