/ / ASP.NET - एएसपीनेट, एक्सएमएल, AJAX, आर्किटेक्चर, सेवा में एक्सएमएल कैसे वापस करें

ASP.NET - एएसपीनेट, एक्सएमएल, AJAX, आर्किटेक्चर, सेवा में एक्सएमएल कैसे वापस करें

यह एक बहुत ही बुनियादी सवाल है। मैं बस एएसपी.नेट (सी #) सीखने के अपने मिशन पर हूं। मैंने पहले क्लासिक एएसपी और PHP किया है।

इस परियोजना के लिए मेरे पास है एएसपी.नेट 2.0 मेरे हाथों में

मेरे पास एक वेब फॉर्म है जिसमें एक है jqGrid डाटाग्रिड कि मैं AJAX के माध्यम से एक्सएमएल डेटा फ़ीड करना चाहता हूं। हालांकि, jqGrid समस्या नहीं है। "समस्या" वह दृष्टिकोण है जिसे मुझे एक्सएमएल उत्पन्न करने के लिए लेना चाहिए।

मैं एएसपी.नेट में ऐसा कैसे करूं?

  • क्या मैं एक नया वेब फॉर्म बना सकता हूं जो उस डेटा को उत्पन्न करता है?
  • क्या मैं एक नई वेब सेवा का उपयोग करता हूं (जो मुझे एक्सएमएल की ज़रूरत नहीं है, है ना?)?
  • क्या मैं किसी भी तरह से मौजूदा वेब फॉर्म में एक फ़ंक्शन डालता हूं जो तालिका दिखाता है? यदि हां, तो कैसे?

उस निर्णय के बाद: मैं एक्सएमएल आउटपुट कैसे करूं? मैं एएसपी.नेट के किसी भी एक्सएमएल घटकों का उपयोग नहीं करना चाहता, क्योंकि यह एक दूसरे के बाद एक रिकॉर्ड के साथ सिर्फ सादा, सरल एक्सएमएल है। सिस्टम.एक्सएमएल का उपयोग करना यहां उचित होने के लिए बहुत अधिक ओवरहेड होगा।

<?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>

अन्य स्क्रिप्टिंग भाषाओं के साथ अपने पिछले अनुभव से, मैं सिर्फ एक्सएमएल टैग (Response.Write) की एक धारा मुद्रित करना चाहता हूं। अगर मैं एएसपी.नेट में ऐसा करता हूं तो क्या मैं नरक में जाऊंगा?

उत्तर:

उत्तर № 1 के लिए 4

एएसएक्स में एक पूर्ण उड़ा हुआ एक्सएमएल डॉक्यूमेंट / लिंक का उपयोग करने का एक अन्य समाधान एक्सएमएलवाइटर का उपयोग करना है, एक्सएमएल को स्ट्रिंग के रूप में क्राफ्ट करने और डोम का उपयोग करने के बीच आधे रास्ते के समाधान के प्रकार का उपयोग करना है।

कुछ इस तरह:

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();
}

उत्तर के लिए 7 № 2

System.Xml का उपयोग करना (या System.Xml।लिंक) हाथ-कोडिंग Response.Write से सही होने के मामले में कम ओवरहेड होगा और यह सुनिश्चित कर लें कि आप जिस चीज की आवश्यकता है उसे उद्धृत करें, एन्कोडिंग इत्यादि को हल करें। आप पहिया को फिर से क्यों शुरू करना चाहते हैं?

एएसपीएक्स पेज के बजाय एक नया एशक्स बनाएं, उपयुक्त एक्सएमएल डॉक्यूमेंट / एक्सडोक्यूमेंट बनाएं और प्रतिक्रिया के लिए लिखें, सामग्री प्रकार को उचित रूप से सेट करें।

देख यह लेख एक आरएसएस फ़ीड बनाने के उदाहरण के लिए। यह वही प्रकार की चीज है जो मैं डेटाबेस से आरएसएस उत्पन्न करने के लिए अपनी साइट पर करता हूं - LINQ से XML का उपयोग करके यह पूरे दस्तावेज़ को एक (स्वीकार्य रूप से बड़ा, लेकिन पठनीय) कथन में बनाता है। फिर यह सिर्फ एक मामला है सामग्री प्रकार और कॉलिंग सेटिंग context.Response.Write(doc)। बहुत आसान।


उत्तर № 3 के लिए 1

एचएम, मैं दो "स्वीकृत उत्तरों" को सौंपना चाहता हूं।)

जॉन स्कीट ने मेरे प्रश्न के पहले भाग का जवाब दिया:

एएसपीएक्स पेज के बजाय एक नया एशक्स बनाएं

इसलिए मैंने एक सामान्य हैंडलर बनाया है जो मैं ढूंढ रहा था।

मैथ्यू पेल्सर ने मेरे प्रश्न के दूसरे भाग का उत्तर दिया:

एक्सएमएलवाइटर का उपयोग करें, एक्सएमएल को एक स्ट्रिंग के रूप में क्राफ्ट करने और एक डोम का उपयोग करने के बीच आधे रास्ते का समाधान।

तो मैंने XmlWriter का उपयोग किया है, जो मैं खोज रहा था।


जवाब के लिए 0 № 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