【问题标题】:How to return XML in ASP.NET如何在 ASP.NET 中返回 XML
【发布时间】:2008-12-17 13:33:21
【问题描述】:

这是一个非常基本的问题。我只是在学习 ASP.NET (C#)。我以前做过经典的 ASP 和 PHP。

对于这个项目,我手头有 ASP.NET 2.0

我有一个包含jqGrid Datagrid 的 Web 表单,我想通过 AJAX 提供 XML 数据。不过,jqGrid 不是这里的问题。 “问题”是我应该采取的生成 XML 的方法。

如何在 ASP.NET 中做到这一点?

  • 我是否要创建一个新的 Web 表单来生成该数据?
  • 我是否使用新的 Web 服务(不会返回我需要的 XML,对吗?)?
  • 我是否以某种方式在现有的 Web 表单中添加了一个显示表格的函数?如果有,怎么做?

做出决定后:如何输出 XML?我不想使用 ASP.NET 的任何 XML 组件,因为它只是简单的 XML,一个记录一个接一个。使用 System.Xml 的开销太大,在此无法证明是合理的。

<?xml version='1.0' encoding='utf-8'?>
<rows>
<page>1</page>
<total>25</total>
<records>3</records>
  <row id='1'>
    <cell>Row 1, Column 1</cell>
    <cell>Row 1, Column 2</cell>
    <cell>Row 1, Column 3</cell>
  </row>
  <row id='2'>
    <cell>Row 2, Column 1</cell>
    <cell>Row 2, Column 2</cell>
    <cell>Row 2, Column 3</cell>
  </row>
  <row id='3'>
    <cell>Row 3, Column 1</cell>
    <cell>Row 3, Column 2</cell>
    <cell>Row 3, Column 3</cell>
  </row>
</rows>

根据我以前使用其他脚本语言的经验,我只想打印出 XML 标记流 (Response.Write)。如果我在 ASP.NET 中这样做,我会下地狱吗?

【问题讨论】:

    标签: asp.net xml ajax architecture service


    【解决方案1】:

    使用 System.Xml(或 System.Xml.Linq)比手动编码 Response.Write 并确保引用所需的所有内容、整理编码等方面的开销更少。为什么要你想重新发明轮子吗?

    创建一个新的 ashx 而不是 aspx 页面,创建适当的 XmlDocument/XDocument 并将其写入响应,并适当设置内容类型。

    有关创建 RSS 提要的示例,请参阅 this article。这与我在我的网站上从数据库生成 RSS 所做的类型相同 - 使用 LINQ to XML 这会在单个(当然很大,但可读)语句中创建整个文档。那么这只是设置内容类型并调用context.Response.Write(doc)的情况。很简单。

    【讨论】:

    • 好的,我需要补充:对于这个项目,我只有.NET 2.0
    • 确实如此。不过,我不能使用 LINQ。 ;)
    【解决方案2】:

    在 ashx 中使用完整的 XmlDocument/Linq 的另一个解决方案是使用 XmlWriter,这是在将 xml 手工制作为字符串和使用 dom 之间的中间解决方案。

    类似:

    StringBuilder query = new StringBuilder();
    
    using (XmlWriter xmlWriter = XmlWriter.Create(query))
    {
        xmlWriter.WriteStartElement("rows");
        xmlWriter.WriteElementString("page", "1");
    
        foreach(...)
        {
    
            xmlWriter.WriteStartElement("rows");
            xmlWriter.WriteAttributeString("row", "1");
    
            foreach(...)
            {
                xmlWriter.WriteElementString("cell", "Row 1, Column 1");
            }
    
            xmlWriter.WriteEndElement();            
        }
    
        xmlWriter.WriteEndElement();
    }
    

    【讨论】:

      【解决方案3】:

      嗯,我想分发两个“已接受的答案”。 ;)

      Jon Skeet 回答了我问题的第一部分:

      创建一个新的ashx而不是aspx页面

      所以我创建了一个我正在寻找的通用处理程序。

      Matthew Pelser 回答了我的问题的第二部分:

      使用 XmlWriter,这是手工将 xml 制作为字符串和使用 dom 之间的中间解决方案。

      所以我使用了 XmlWriter,这正是我所寻找的。​​p>

      【讨论】:

        【解决方案4】:

        test.ashx 的工作示例:

        <%@ WebHandler Class="XMLHandler" %>
        Imports System.Xml
        
        Public Class XMLHandler : Implements IHttpHandler
          Public Sub ProcessRequest(ByVal context as HttpContext) Implements IHttpHandler.ProcessRequest
            context.Response.ContentType = "text/xml"
            Dim input as string = context.Request.Params("input")
            Dim settings as new XmlWriterSettings()
            settings.Indent = false
        
            Using xml as XmlWriter = XmlWriter.Create(context.Response.Output, settings)
              xml.WriteStartDocument
              xml.WriteStartElement("wsis")
                xml.WriteAttributeString("id","p4")
                xml.WriteElementString("user_id", "test")
              xml.WriteEndElement()
              xml.WriteEndDocument()
            End Using    
          End Sub
        
          Public ReadOnly Property IsReusable() as Boolean Implements IHttpHandler.IsReusable
            Get
              Return True
            End Get
          End Property
        End Class
        

        【讨论】:

          猜你喜欢
          • 2010-10-07
          • 2020-03-30
          • 2014-11-17
          • 1970-01-01
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多