2009-07-29 5 views
4

私のXMLファイルのフォーマットは以下の通りです。JavaScriptを使用してXMLファイルを読む

<markers> 
     <marker> 
      <type></type> 
      <title></title> 
      <address></address> 
      <latitude></latitude> 
      <longitude></longitude> 
     <marker> 
     <marker> 
      <type></type> 
      <title></title> 
      <address></address> 
      <latitude></latitude> 
      <longitude></longitude> 
     <marker> 
    </markers> 

どのように私はすべての "マーカー"要素を読むことができますか教えてください。 私はあなたがWebサーバーからこれを取得した場合、jQueryをチェックアウトする「マーカー」

おかげ

答えて

4

のすべての子要素の値を取得する必要があります。 Ajax load functionを使用してロードし、Selectorsを使用して、目的のノードまたはテキストを選択することができます。

http環境でこれを行いたくない場合や、jQueryを使用しない場合は、より詳しく説明してください。

+0

このフォーマットのデータを解析して取得する必要があります。 – Avinash

+0

このJavaScriptはブラウザ内で動作しますか?次に、ファイルにアクセスするための拡張機能が必要です。 –

+0

jqueryのajaxロード機能はまともな仕事をすると思います。あなたがjqueryを使用する方法を知っていれば、またはあなたが素早いコードのためにいるなら、BYKの答えが適切かもしれません。 – user10398

6

以下のコードは、XMLObjectまたは文字列をネイティブJavaScriptオブジェクトに変換します。次に、オブジェクト上を歩いて任意の値を抽出することができます。

/** 
* Tries to convert a given XML data to a native JavaScript object by traversing the DOM tree. 
* If a string is given, it first tries to create an XMLDomElement from the given string. 
* 
* @param {XMLDomElement|String} source The XML string or the XMLDomElement prefreably which containts the necessary data for the object. 
* @param {Boolean} [includeRoot] Whether the "required" main container node should be a part of the resultant object or not. 
* @return {Object} The native JavaScript object which is contructed from the given XML data or false if any error occured. 
*/ 
Object.fromXML = function(source, includeRoot) { 
    if(typeof source == 'string') 
    { 
     try 
     { 
      if (window.DOMParser) 
       source = (new DOMParser()).parseFromString(source, "application/xml"); 
      else if(window.ActiveXObject) 
      { 
       var xmlObject = new ActiveXObject("Microsoft.XMLDOM"); 
       xmlObject.async = false; 
       xmlObject.loadXML(source); 
       source = xmlObject; 
       xmlObject = undefined; 
      } 
      else 
       throw new Error("Cannot find an XML parser!"); 
     } 
     catch(error) 
     { 
      return false; 
     } 
    } 

    var result = {}; 

    if(source.nodeType == 9) 
     source = source.firstChild; 
    if(!includeRoot) 
     source = source.firstChild; 

    while(source) { 
     if(source.childNodes.length) { 
      if(source.tagName in result) { 
       if(result[source.tagName].constructor != Array) 
        result[source.tagName] = [result[source.tagName]]; 
       result[source.tagName].push(Object.fromXML(source)); 
      } 
      else 
       result[source.tagName] = Object.fromXML(source); 
     } else if(source.tagName) 
      result[source.tagName] = source.nodeValue; 
     else if(!source.nextSibling) { 
      if(source.nodeValue.clean() != "") { 
       result = source.nodeValue.clean(); 
      } 
     } 
     source = source.nextSibling; 
    } 
    return result; 
}; 

String.prototype.clean = function() { 
    var self = this; 
    return this.replace(/(\r\n|\n|\r)/gm, "").replace(/^\s+|\s+$/g, ""); 
} 
2

あなたのノードを読むには、このようなことができます。

また、あなたは、あなたが上記のXMLの子を読み込むためのスクリプトの下に使用することができますこのページでは、いくつかの説明http://www.compoc.com/tuts/

<script type="text/javascript"> 
     var markers = null; 
     $(document).ready(function() { 
      $.get("File.xml", {}, function (xml){ 
       $('marker',xml).each(function(i){ 
       markers = $(this); 
       }); 
      }); 
     }); 
</script> 
4

を見つけることができます。 IEとMozila Firefoxの両方で動作します。

<script type="text/javascript"> 

function readXml(xmlFile){ 

var xmlDoc; 

if(typeof window.DOMParser != "undefined") { 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("GET",xmlFile,false); 
    if (xmlhttp.overrideMimeType){ 
     xmlhttp.overrideMimeType('text/xml'); 
    } 
    xmlhttp.send(); 
    xmlDoc=xmlhttp.responseXML; 
} 
else{ 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; 
    xmlDoc.load(xmlFile); 
} 
var tagObj=xmlDoc.getElementsByTagName("marker"); 
var typeValue = tagObj[0].getElementsByTagName("type")[0].childNodes[0].nodeValue; 
var titleValue = tagObj[0].getElementsByTagName("title")[0].childNodes[0].nodeValue; 
} 
</script> 
関連する問題