使用javascript读取XML文件

使用javascript读取XML文件

问题描述:

我的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> 

请指教我如何阅读所有“标记”元素。 我需要获得“标记”

感谢

的所有子元素的值,如果从网络服务器得到这个,看看jQuery。您可以使用Ajax load function加载它,并使用Selectors选择所需的节点或文本。

如果您不想在http环境中执行此操作或避免使用jQuery,请详细解释。

+0

我只是需要解析和获取这种格式的xml文件的数据。 – Avinash 2009-07-29 10:16:08

下面的代码会将任何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, ""); 
} 

你可以这样做来阅读你的节点。你

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

您可以使用下面的脚本读取上面的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>