代码之家  ›  专栏  ›  技术社区  ›  Marcelo Cantos

如何在ASP.NET中返回XML

  •  1
  • Marcelo Cantos  · 技术社区  · 16 年前

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

    对于这个项目,我有 ASP.NET 2.0 在我手上。

    我有一个Web表单,它有一个 jqGrid Datagrid,我希望通过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中这样做,我会下地狱吗?

    4 回复  |  直到 16 年前
        1
  •  7
  •   Jon Skeet    16 年前

    使用System.Xml(或System.Xml.Linq)在获得正确响应方面的开销比手工编写响应代码要少。编写并确保引用所需的所有内容,整理编码等。为什么要重新发明轮子?

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

    看见 this article context.Response.Write(doc) . 很简单。

        2
  •  4
  •   Chau    13 年前

    在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
  •  1
  •   Marcelo Cantos    16 年前

    嗯,我想分发两份“公认的答案”。)

    创建新的ashx而不是aspx页面

    使用XmlWriter,这是一种介于将xml手工制作为字符串和使用dom之间的折衷解决方案。

        4
  •  0
  •   Smart Thinker    8 年前

    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