2013-07-11 14 views
62

JavaScriptを使用してXMLを解析できる必要があります。 XMLは変数になります。私はjQueryや他のフレームワークを使用したくないと思う。JavaScriptを使用してXMLを解析する

私はこれを見て、XML > jQuery readingです。

+0

私はPhoneGapを使用してアプリをパッケージ化することがありますが、それが機能するかどうかわかりません。 – user2574350

答えて

123

last questionから、GeoNamesのFindNearestAddressを使用して見つかったXMLを解析(読み取りおよび変換)しようとしている20分前に尋ねられます。あなたの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> 

次に、あなたは、このようにJavascriptをDOMで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

jqueryを使用すると、 'xmlDoc.getElementsByTagName(" streetNumber)の代わりに '$(xmlDoc).find( 'street:eq(0):eq(0) ")[0] .childNodes [0] .nodeValue; ' –

+0

非常に役に立ちましたEnigmadanありがとう! – Andrew

+3

OPの他の質問の回答を検索して統合することは、私が高レベルのSOゲームと呼ぶものです。私は感動している、よくやった! – maryisdead

12

以下は、Internet Explorer 6を含むすべての主要なブラウザでXML文字列をXMLドキュメントに解析します。これを取得したら、childNodesやgetElementsByTagName()などの通常のDOMトラバーサルメソッド/プロパティを使用してあなたが望むノード。

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

使用例:私はhttps://stackoverflow.com/a/8412989/1232175からもらった

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

関連する問題