सवाल मैं jQuery (क्रॉस ब्राउज़र) द्वारा लौटाए गए XML दस्तावेज़ से संपूर्ण XML स्ट्रिंग कैसे प्राप्त करूं?


मैंने कोशिश की है और एक जीईटी द्वारा लौटाए गए XMLDocument से संपूर्ण XML स्ट्रिंग कैसे प्राप्त करें, यह जानने में विफल रहा है। ऑब्जेक्ट में विशिष्ट तत्वों को कैसे ढूंढें या प्रतिस्थापित करें, इस पर SO पर बहुत से प्रश्न हैं, लेकिन मुझे पूरे दस्तावेज़ को स्ट्रिंग के रूप में प्राप्त करने का कोई जवाब नहीं मिल रहा है।

जिस उदाहरण के साथ मैं काम कर रहा हूं वह है यहाँ। "एक्सएमएल के साथ कुछ करें" -part वह जगह है जहां मैं फिलहाल हूं। मुझे यह महसूस हो रहा है कि यह वास्तव में छोटा होना चाहिए, लेकिन मैं यह पता लगाने में असफल रहा कि कैसे। क्या कोई "xml.data ()" या इसी तरह का उपयोग किया जा सकता है जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है?

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});

उपयोग का मामला यह है कि मैं फ्लैश प्लगइन के लिए एक्सएमएल फ़ीड करना चाहता हूं और इसके लिए मुझे एक स्ट्रिंग के रूप में वास्तविक एक्सएमएल की आवश्यकता है।


38
2017-11-04 16:34


मूल




जवाब:


मुझे एक स्ट्रिंग के रूप में वास्तविक एक्सएमएल चाहिए

आप एक्सएमएल ऑब्जेक्ट के बजाय इसे सादा पाठ के रूप में चाहते हैं? परिवर्तन dataType से 'xml' सेवा मेरे 'text'। देखें $ .ajax दस्तावेज अधिक विकल्पों के लिए।


44
2017-11-04 16:38



धन्यवाद। मुझे पता था कि यह छोटा था :) - icecream
+1 यह अनियंत्रित के बावजूद काम करता है दस्तावेज़ मुझे मिला है। AJAX # विकल्प लिंक के लिए धन्यवाद। - Krzysztof Jabłoński


यदि आप दोनों चाहते हैं, तो XML दस्तावेज़ और स्ट्रिंग के रूप में प्रतिक्रिया प्राप्त करें। आपको करने में सक्षम होना चाहिए

success: function(data){
  //data.xml check for IE
  var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
  alert(xmlstr);
}

यदि आप इसे स्ट्रिंग के रूप में चाहते हैं तो आप निर्दिष्ट क्यों करते हैं dataType:xml तब नहीं होगा dataType:text अधिक उपयुक्त हो?


54
2017-11-04 16:39



अगर मैंने एक्सएमएल ऑब्जेक्ट डिज़ाइन किया है, तो मेरे पास डेटा प्राप्त करने के लिए एपीआई क्यों नहीं होगी? - icecream
एक्सएमएल ऑब्जेक्ट एक्सएमएल के अंदर संग्रहीत डेटा प्राप्त करने / छेड़छाड़ करने के लिए है। आप स्वयं एक्सएमएल चाहते हैं, जो एक अलग बात है :) - Olly Hodgson
बलुस के रूप में अजीब एक ही जवाब अभी तक एक ही अपवित्र नहीं है और न ही स्वीकार किया गया है ?? - jitter
@ ओली: अगर मैं दोनों चाहता हूं तो क्या होगा? क्या मुझे इसे स्ट्रिंग के रूप में प्राप्त करना चाहिए और फिर क्लाइंट पर XML दस्तावेज़ बनाना चाहिए? "Xml" को "टेक्स्ट" में बदलकर मेरी समस्या हल हो गई, लेकिन मुझे अभी भी लगता है कि "getData ()" फ़ंक्शन या XMLDocument पर समान होना चाहिए। @jitter: मुझे लगता है कि बलुस ने आपके सामने जवाब दिया था, लेकिन मैं आपको उखाड़ फेंक दूंगा। - icecream
अगर आप xmldocument और स्ट्रिंग दोनों चाहते हैं तो उत्तर प्रदान किया गया - jitter


आप अपनी जावा स्क्रिप्ट में एक एक्सएमएल ऑब्जेक्ट को स्ट्रिंग में आसानी से कनवर्ट भी कर सकते हैं:

var xmlString = (new XMLSerializer()).serializeToString(xml);

23
2018-05-24 13:37



जिटर का जवाब बेहतर है क्योंकि यह आईई का भी समर्थन करता है। - ZiggyTheHamster
मेरे लिए काम नहीं लग रहा है: TypeError: XMLSerializer.serializeToString का तर्क 1 इंटरफ़ेस नोड को लागू नहीं करता है। - Yster


यदि आपको केवल jquery से लौटाए गए xml का प्रतिनिधित्व करने वाली स्ट्रिंग की आवश्यकता है, तो xml वापस टेक्स्ट में पार्स करने की कोशिश करने के बजाय बस अपना डेटाटाइप "टेक्स्ट" पर सेट करें। निम्नलिखित आपको अपने AJAX कॉल से केवल कच्चे पाठ को वापस देना चाहिए:

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'text',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});

1
2017-11-04 16:39





यद्यपि इस प्रश्न का उत्तर पहले ही दिया जा चुका है, मैं एक चेतावनी को इंगित करना चाहता था: इंटरनेट एक्सप्लोरर के साथ jQuery का उपयोग करके एक्सएमएल पुनर्प्राप्त करते समय, आप जरूर "टेक्स्ट / एक्सएमएल" (या "एप्लिकेशन / एक्सएमएल") होने के लिए सामग्री-प्रकार निर्दिष्ट करें या अन्यथा आप डेटा को पार्स करने में सक्षम नहीं होंगे जैसे कि यह jQuery का उपयोग कर एक्सएमएल था।

आप सोच रहे होंगे कि यह एक स्पष्ट बात है लेकिन आईई के बजाय मोज़िला / क्रोम / ओपेरा का उपयोग करते समय मुझे पकड़ा गया। "टेक्स्ट" के सामग्री-प्रकार के साथ एक्सएमएल की "स्ट्रिंग" को पुनर्प्राप्त करते समय, आईई को छोड़कर सभी ब्राउजर आपको अभी भी उस डेटा को पार्स करने के लिए अनुमति देंगे (jQuery चयनकर्ताओं का उपयोग करके) जैसे कि यह एक्सएमएल था। आईई एक त्रुटि फेंक नहीं देगा और किसी भी परिणाम को एक jQuery चयन कथन में वापस नहीं करेगा।

तो, आपके उदाहरण में, जब तक आपको केवल एक्सएमएल के स्ट्रिंग-सीरियलाइज्ड संस्करण की आवश्यकता होती है और एक्सएमएल डीओएम पर किसी भी तरह के चयन करने के लिए jQuery की अपेक्षा नहीं करेगा, तो आप सामग्री-प्रकार को "टेक्स्ट" पर सेट कर सकते हैं। लेकिन अगर आपको jQuery के साथ एक्सएमएल को पार्स करने की भी आवश्यकता है, तो आपको एक कस्टम रूटीन लिखनी होगी जो एक्सएमएल को आपके लिए एक स्ट्रिंग में क्रमबद्ध करे, या फिर सामग्री-प्रकार "एक्सएमएल" के साथ एक्सएमएल का संस्करण पुनर्प्राप्त करें।

उम्मीद है कि किसी की मदद करता है :)


1
2017-07-13 15:53





आप अनुरोध में इस्तेमाल मूल XMLHttpRequest ऑब्जेक्ट प्राप्त कर सकते हैं। उस समय मैं यह जवाब पोस्ट कर रहा हूं, jQuery दस्तावेज़ ऐसा करने के कुछ तरीके बताते हैं।

उनमें से एक सफलता कॉलबैक के तीसरे तर्क के माध्यम से है:

success: function(xml, status, xhr){
    console.log(arguments);
    console.log(xhr.responseXML, xhr.responseText);
    console.log('Finished!');
}

एक पूर्ण उदाहरण के लिए: https://jsfiddle.net/44m09r2z/


1
2018-03-01 17:27