2009-07-29 14 views
4

Mon format de fichier XML est comme ci-dessous.Lire le fichier XML en utilisant javascript

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

S'il vous plaît me suggérer comment puis-je lire tout l'élément "marqueur". J'ai besoin pour obtenir la valeur de tous les élément enfant du « marqueur »

Merci

Répondre

4

Si vous obtenez ce à partir d'un serveur Web, consultez jQuery. Vous pouvez le charger en utilisant le Ajax load function et sélectionner le nœud ou le texte que vous voulez, en utilisant Selectors.

Si vous ne voulez pas faire cela dans un environnement http ou éviter d'utiliser jQuery, veuillez expliquer plus en détail.

+0

J'ai juste besoin d'analyser et d'obtenir des données de ce fichier xml de format .. – Avinash

+0

Ce JavaScript sera-t-il dans un navigateur? Ensuite, vous avez besoin d'extensions pour accéder aux fichiers. –

+0

Je pense que la fonction de chargement ajax de jquery fera un travail décent. Pourvu que vous sachiez comment utiliser jquery..ou si vous êtes dans un code rapide .. alors la réponse par BYK pourrait convenir. – user10398

6

Le code ci-dessous convertira n'importe quel XMLObject ou chaîne en un objet JavaScript natif. Ensuite, vous pouvez marcher sur l'objet pour extraire toute valeur que vous voulez.

/** 
* 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

Vous pouvez faire quelque chose comme ceci pour lire vos nœuds.

vous pouvez également trouver quelques explications sur cette page 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

Vous pouvez utiliser ci-dessous script pour la lecture de l'enfant xml ci-dessus. Cela fonctionnera avec IE et Mozilla Firefox tous les deux.

<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> 
Questions connexes