【问题标题】:How can I output XML from code behind in an ASPX file?如何从 ASPX 文件中的代码输出 XML?
【发布时间】:2011-01-18 17:57:37
【问题描述】:

我需要在 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 文件中使用 &lt;asp:label&gt;,因为它需要放在标签中。我基本上有一个空白的 ASPX 页面。

怎么办?

【问题讨论】:

    标签: .net xml c#-3.0 asx


    【解决方案1】:

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

    接口的实现方法可以看this example

    【讨论】:

      【解决方案2】:

      Response.Write 应该在后面的代码中工作:

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

      但是您应该在 Page_Load 方法中执行此代码。 您应该准备单独的 aspx 页面来生成 xml 并重定向用户该页面。此页面应为空(仅在 aspx 文件中为 &lt;%@ ... %&gt;)。

      【讨论】:

        【解决方案3】:

        您应该为此使用IHttpHandler - 您可以通过making an .ashx file(非常简单)或registering them in the web.config file 配置它处理哪个URL或者,这更灵活,但更棘手,因为经典模式和集成模式 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。

        【讨论】:

          【解决方案4】:
              Response.ClearHeaders();
              Response.ContentType = "text/xml;charset=UTF-8";
              string xmlString = "<aaa>sai</aaa>";
              Response.Write(xmlString);
              Response.End();
          

          【讨论】:

            猜你喜欢
            • 2013-08-18
            • 2014-11-16
            • 2013-11-05
            • 1970-01-01
            • 2018-07-10
            • 2015-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多