1

这是一个非常基本的问题。我只是在学习 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 中这样做,我会下地狱吗?

4

4 回答 4

7

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

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

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

于 2008-12-17T13:38:54.183 回答
4

在 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();
}
于 2008-12-17T14:15:53.953 回答
1

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

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

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

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

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

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

所以我使用了 XmlWriter,这正是我正在寻找的。

于 2008-12-17T15:41:18.647 回答
0

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
于 2016-01-27T10:26:06.607 回答