2013-07-11 1 views
62

का उपयोग कर पार्स एक्सएमएल मुझे जावास्क्रिप्ट का उपयोग करके एक्सएमएल पार्स करने में सक्षम होना चाहिए। एक्सएमएल एक चर में होगा। मैं jQuery या अन्य ढांचे का उपयोग नहीं करना पसंद करूंगा।जावास्क्रिप्ट

मैंने इसे देखा है, XML > jQuery reading

+0

मैं ऐप पैकेज करने के लिए फोनगैप का उपयोग करने जा रहा हूं और मुझे नहीं पता कि यह काम करेगा या नहीं। – user2574350

उत्तर

123

मैं आपके last question से अनुमान लगा रहा हूं, इस से 20 मिनट पहले पूछा गया था कि आप GeoNames 'FindNearestAddress का उपयोग करके एक्सएमएल को पार्स (पढ़ और परिवर्तित) करने का प्रयास कर रहे हैं।

अपने XML txt कहा जाता है एक स्ट्रिंग चर में है और इस तरह दिखाई देता है:

<address> 
    <street>Roble Ave</street> 
    <mtfcc>S1400</mtfcc> 
    <streetNumber>649</streetNumber> 
    <lat>37.45127</lat> 
    <lng>-122.18032</lng> 
    <distance>0.04</distance> 
    <postalcode>94025</postalcode> 
    <placename>Menlo Park</placename> 
    <adminCode2>081</adminCode2> 
    <adminName2>San Mateo</adminName2> 
    <adminCode1>CA</adminCode1> 
    <adminName1>California</adminName1> 
    <countryCode>US</countryCode> 
</address> 

तो फिर तुम इस तरह जावास्क्रिप्ट डोम के साथ XML को पार्स कर सकते हैं:

if (window.DOMParser) 
{ 
    parser = new DOMParser(); 
    xmlDoc = parser.parseFromString(txt, "text/xml"); 
} 
else // Internet Explorer 
{ 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async = false; 
    xmlDoc.loadXML(txt); 
} 

और से विशिष्ट मूल्यों को प्राप्त इस तरह के नोड्स:

//Gets house address number 
xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodeValue; 

//Gets Street name 
xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue; 

//Gets Postal Code 
xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue; 

JSFiddle

+2

ध्यान दें कि आप '$ (xmlDoc) .find (' street: eq (0): eq (0) ') जैसे मानों को त्वरित रूप से एक्सेस करने के लिए jquery का उपयोग कर सकते हैं।' XmlDoc.getElementsByTagName ("streetNumber 'के बजाय html()' ") [0] .childNodes [0] .nodeValue;' –

+0

बहुत उपयोगी Enigmadan धन्यवाद! – Andrew

+3

ओपी के अन्य प्रश्नों के उत्तरों को देखकर और एकीकृत करना वह है जो मैं उच्च स्तरीय SO गेम कहता हूं। मैं प्रभावित हूं, अच्छी तरह से किया! – maryisdead

12

निम्नलिखित इंटरनेट एक्सप्लोरर 6 सहित सभी प्रमुख ब्राउज़रों में एक्सएमएल स्ट्रिंग को एक्सएमएल स्ट्रिंग में पार्स कर देगा। एक बार जब आप इसे प्राप्त कर लेंगे, तो आप सामान्य डीओएम ट्रैवर्सल विधियों/गुणों जैसे कि बाल नोड्स और getElementsByTagName() प्राप्त कर सकते हैं। नोड्स आप चाहते हैं।

var parseXml; 
if (typeof window.DOMParser != "undefined") { 
    parseXml = function(xmlStr) { 
     return (new window.DOMParser()).parseFromString(xmlStr, "text/xml"); 
    }; 
} else if (typeof window.ActiveXObject != "undefined" && 
     new window.ActiveXObject("Microsoft.XMLDOM")) { 
    parseXml = function(xmlStr) { 
     var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xmlStr); 
     return xmlDoc; 
    }; 
} else { 
    throw new Error("No XML parser found"); 
} 

उदाहरण उपयोग:

var xml = parseXml("<foo>Stuff</foo>"); 
alert(xml.documentElement.nodeName); 

कौन सा मैं https://stackoverflow.com/a/8412989/1232175 से मिला है।

संबंधित मुद्दे