1

これは非常に基本的な質問です。私はASP.NET(C#)を学ぶという使命を帯びています。私は以前に古典的なASPとPHPを実行しました。

このプロジェクトでは、 ASP.NET2.0を手にしています。

AJAXを介してXMLデータをフィードしたいjqGridDatagridを含むWebフォームがあります。ただし、ここではjqGridは問題ではありません。「問題」は、XMLを生成するために私が取るべきアプローチです。

ASP.NETでそれを行うにはどうすればよいですか?

  • そのデータを生成する新しいWebフォームを作成しますか?
  • 新しいWebサービスを使用しますか(必要なXMLが返されませんか?)?
  • どういうわけか、テーブルを表示する既存のWebフォームに関数を配置しますか?もしそうなら、どのように?

その決定がなされた後:XMLを出力するにはどうすればよいですか?ASP.NETのXMLコンポーネントは使用したくありません。これは、レコードが1つずつ続く単純で単純な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を手動でコーディングして、必要なものをすべて引用し、エンコーディングを整理するよりも、オーバーヘッドが少なくなります。車輪の再発明?

aspxページの代わりに新しいashxを作成し、適切なXmlDocument / XDocumentを作成して、コンテンツタイプを適切に設定して、それを応答に書き込みます。

RSSフィードの作成例については、この記事を参照してください。これは、データベースからRSSを生成するために自分のサイトで行うのと同じタイプのことです。LINQtoXMLを使用すると、ドキュメント全体が1つの(確かに大きいが読み取り可能な)ステートメントで作成されます。次に、コンテンツタイプを設定してを呼び出す場合context.Response.Write(doc)です。とてもシンプルです。

于 2008-12-17T13:38:54.183 に答える
4

ashx で本格的な XmlDocument/Linq を使用するもう 1 つの解決策は、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

うーん、「承認された回答」を 2 つ配布したいと思います。;)

Jon Skeet は私の質問の最初の部分に答えました。

aspx ページの代わりに新しい ashx を作成する

そこで、探していた汎用ハンドラーを作成しました。

Matthew Pelser が私の質問の 2 番目の部分に答えました。

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 に答える