2009-07-29 123 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> 

請指教我如何閱讀所有「標記」元素。 我需要獲得「標記」

感謝

回答

4

的所有子元素的值,如果從網絡服務器得到這個,看看jQuery。您可以使用Ajax load function加載它,並使用Selectors選擇所需的節點或文本。

如果您不想在http環境中執行此操作或避免使用jQuery,請詳細解釋。

+0

我只是需要解析和獲取這種格式的xml文件的數據。 – Avinash 2009-07-29 10:16:08

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

你可以這樣做來閱讀你的節點。你

也可以找到一些解釋在本頁面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

您可以使用下面的腳本讀取上面的XML的孩子。它將與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>