Mega Code Archive

 
Categories / JavaScript DHTML / Development
 

Loads a XML file and permits to access to the data it contains

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML>   <HEAD>     <TITLE>JsLib 1.3 - Exemple - xml.js</TITLE>     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">     <META NAME="Author" CONTENT="Etienne CHEVILLARD">          <!-- xml.js -->     <SCRIPT TYPE="text/javascript" LANGUAGE="Javascript"> /* xml.js  * Role : charge un fichier XML et permet d'acceder aux donnees qu'il contient  * Projet : JsLib  * Auteur : Etienne CHEVILLARD (echevillard@users.sourceforge.net)  * Version : 1.3  * Creation : 20/08/2004  * Mise a jour : 23/02/2005  * Bogues connues : - Opera 7 ignore les commentaires du fichier XML  */ // --- Variables globales --- // chargement du fichier XML var xml_charge=false; var xml_doc; // --- Fonctions --- // supprime les espaces qui commencent ou qui terminent la chaine specifiee function xml_suppEsp(chaine) {   var xdeb;   var xfin;   xdeb=chaine;   xfin=chaine;   for(var i=0; ((i<xdeb.length) && (xdeb.charAt(i)==' ')); i++) {     xfin=xfin.substring(1, xfin.length);   }   xdeb=xfin;   for(var i=xdeb.length-1; ((i>=0) && (xdeb.charAt(i)==' ')); i--)     xfin=xfin.substring(0, xfin.length-1);   return (xfin); } // fin forms_suppEsp(chaine) // indique si le navigateur accepte le XML function accepteXML() {   return ((document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("XML", "1.0"))     || (document.implementation && document.implementation.createDocument)     || (window.XMLHttpRequest)     || (window.ActiveXObject)     || (document.createElement && document.childNodes)); } // fin accepteXML() // charge en memoire le fichier XML d'URL specifiee function chargerFichierXML(url) {   if ((!url) || (url=="")) return false;   xml_charge=false;   try {     // implementation conforme au DOM du W3C (Firefox, Mozilla, Netscape)     if (document.implementation && document.implementation.createDocument) {       xml_doc=document.implementation.createDocument("", "", null);       xml_doc.onload=function () { xml_charge=true; }       xml_doc.load(url);     // implementation avec objet XMLHttpRequest     } else if (window.XMLHttpRequest) {       xml_doc=new XMLHttpRequest();       xml_doc.onreadystatechange=function () { if (xml_doc.readyState==4) xml_charge=true; }       xml_doc.open("GET", url, true);       xml_doc.send(null);     // implementation avec ActiveX (Internet Explorer)     } else if (window.ActiveXObject) {       xml_doc=new ActiveXObject("Microsoft.XMLDOM");       xml_doc.onreadystatechange=function () { if (xml_doc.readyState==4) xml_charge=true; }       xml_doc.load(url);     // implementation avec un objet IFRAME et une division cachee (Opera 7)     } else if (document.createElement && document.childNodes) {       var ndiv=document.createElement("DIV");       ndiv.id="jslib_xml_div";       ndiv.style.position="absolute";       ndiv.style.visibility="hidden";       ndiv.innerHTML = "<iframe onLoad=\"xml_doc=window.frames.jslib_xml_ifr.window.document; xml_charge=true;\""         + " name=\"jslib_xml_ifr\" src=\"" + url + "\"><\/iframe>";       document.body.appendChild(ndiv);     } else {       return false;     }   } catch (e) {     return false;   }   return true; } // fin chargerFichierXML(url) // compte le nombre de noeuds XML de nom specifie function compterNoeuds(nomNoeud) {   if (!xml_charge) return 0;   if ((!nomNoeud) || (nomNoeud=="")) return 0;   var elts=xml_doc.getElementsByTagName(nomNoeud);   return (parseInt(elts.length)); } // fin compterNoeuds(nomNoeud) // retourne les commentaires du document XML function obtenirCommentaires() {   if (!xml_charge) return "";   var elts=xml_doc.childNodes;   var txt="";   if (elts.length<1) return txt;   for (var i=0; i<elts.length; i++) {     if (parseInt(elts[i].nodeType)==8) {       if (txt!="") txt+="\n";       txt+=xml_suppEsp(elts[i].nodeValue);     }   }   return txt; } // fin obtenirCommentaires() // retourne le premier noeud XML de nom et de valeur specifies function obtenirNoeud(nomNoeud, valeurNoeud) {   if (!xml_charge) return;   if ((!nomNoeud) || (nomNoeud=="")) return;   var elts=xml_doc.getElementsByTagName(nomNoeud);   if (elts.length<1) return;   for (var i=0; i<elts.length; i++) {     if (parseInt(elts[i].nodeType)==1) {       if ((!valeurNoeud) || (obtenirValeurNoeud(elts[i])==valeurNoeud))         return (elts[i]);     }   }   return; } // fin obtenirNoeud(nomNoeud, valeurNoeud) // retourne le noeud fils de nom specifie du noeud XML passe en parametre function obtenirNoeudFils(noeud, nomFils) {   if (!xml_charge) return;   if (!noeud) return;   if ((!nomFils) || (nomFils=="")) return;   var elts=noeud.childNodes;   if (elts.length<1) return;   for (var i=0; i<elts.length; i++) {     if ((parseInt(elts[i].nodeType)==1)       && (obtenirNomNoeud(elts[i])==nomFils))       return elts[i];   }   return; } // fin obtenirNoeudFils(noeud, nomFils) // retourne le noeud pere du noeud XML passe en parametre function obtenirNoeudPere(noeud) {   if (!xml_charge) return;   if (!noeud) return;   if (noeud.parentNode) return (noeud.parentNode);   return; } // fin obtenirNoeudPere(noeud) // retourne le noeud XML racine du document XML function obtenirNoeudRacine() {   if (!xml_charge) return;   var elts=xml_doc.childNodes;   if (elts.length<1) return;   for (var i=0; i<elts.length; i++) {     if (parseInt(elts[i].nodeType)==1)       return(elts[i]);   }   return; } // fin obtenirNoeudRacine() // retourne le nom du noeud XML passe en parametre function obtenirNomNoeud(noeud) {   if (!xml_charge) return "";   if (!noeud) return "";   if (noeud.nodeName) return (noeud.nodeName);   if (noeud.name) return (noeud.name);   return ""; } // fin obtenirNomNoeud(noeud) // retourne la valeur de l'attribut specifie du noeud XML passe en parametre function obtenirValeurAttribut(noeud, attribut) {   if (!xml_charge) return "";   if (!noeud) return "";   if ((!attribut) || (attribut=="")) return "";   if (noeud.getAttribute(attribut)) return noeud.getAttribute(attribut);   if (noeud.attributes[attribut]) return noeud.attributes[attribut].value;   return ""; } // fin obtenirValeurAttribut(noeud, attribut) // retourne la valeur du noeud XML passe en parametre function obtenirValeurNoeud(noeud) {   if (!xml_charge) return "";   if ((!noeud) || (!noeud.firstChild)) return "";   if (noeud.firstChild.nodeValue) return (xml_suppEsp(noeud.firstChild.nodeValue));   if (noeud.firstChild.data) return (xml_suppEsp(noeud.firstChild.data));   return ""; } // fin obtenirValeurNoeud(noeud) // retourne le premier noeud XML dont la valeur contient la chaine specifiee function rechercherNoeud(nomNoeud, valeurNoeud) {   if (!xml_charge) return;   if ((!nomNoeud) || (nomNoeud=="")) return;   if (!valeurNoeud) valeurNoeud="";   var elts=xml_doc.getElementsByTagName(nomNoeud);   if (elts.length<1) return;   for (var i=0; i<elts.length; i++) {     if (parseInt(elts[i].nodeType)==1) {       if (obtenirValeurNoeud(elts[i]).toLowerCase().indexOf(valeurNoeud.toLowerCase())>=0)         return (elts[i]);     }   }   return; } // fin rechercherNoeud(nomNoeud, valeurNoeud) // retourne le premier noeud XML dont l'attribut specifie contient la chaine specifiee function rechercherNoeudParAttribut(nomNoeud, attribut, valeurAttribut) {   if (!xml_charge) return;   if ((!nomNoeud) || (nomNoeud=="")) return;   if ((!attribut) || (attribut=="")) return;   if (!valeurAttribut) valeurAttribut="";   var elts=xml_doc.getElementsByTagName(nomNoeud);   if (elts.length<1) return;   for (var i=0; i<elts.length; i++) {     if (parseInt(elts[i].nodeType)==1) {       if (obtenirValeurAttribut(elts[i], attribut).toLowerCase().indexOf(valeurAttribut.toLowerCase())>=0)         return (elts[i]);     }   }   return; } // fin rechercherNoeudParAttribut(nomNoeud, attribut, valeurAttribut) // verifie que le fichier XML est totalement charge en memoire function verifierChargementXML() {   return (xml_charge); } // fin verifierChargementXML()     </SCRIPT>   </HEAD>   <BODY>       <H1>JsLib 1.3</H1>     <HR>     <H2>Exemple - xml.js</H2>     <NOSCRIPT>       <P><I>Erreur : votre navigateur ne reconnait pas le Javascript ou est configur&eacute; pour ne       pas prendre en compte le code Javascript. Dans ce dernier cas, vous pouvez modifier la       configuration dans les pr&eacute;f&eacute;rences/options de votre navigateur.</I>       <HR>     </NOSCRIPT>          <P>Est-ce que votre navigateur prend en charge le XML ?       <SCRIPT TYPE="text/javascript" LANGUAGE="Javascript">         if (accepteXML()) document.write("oui");         else document.write("non");       </SCRIPT>     <FORM ACTION="GET" NAME="f1" onSubmit="return false">       <P>Charger le fichier "europe.xml"&nbsp;:         <INPUT TYPE=BUTTON NAME="b1" VALUE="Charger"           onClick="alert(chargerFichierXML('./extra/europe.xml'));">                            <P>V&eacute;rifier le chargement du fichier "europe.xml"&nbsp;:         <INPUT TYPE=BUTTON NAME="b2" VALUE="V&eacute;rifier"           onClick="if (verifierChargementXML()) alert('Chargement des donn&eacute;es OK.');                     else alert('Chargement des donn&eacute;es incomplet.');">       <P>Commentaires du document XML&nbsp;:         <INPUT TYPE=BUTTON NAME="b3" VALUE="Afficher"           onClick="alert(obtenirCommentaires());">         <P>Nom du noeud racine du document XML&nbsp;:         <INPUT TYPE=BUTTON NAME="b4" VALUE="Afficher"           onClick="alert(obtenirNomNoeud(obtenirNoeudRacine()));">              <P>Valeur du premier noeud de nom "etat"&nbsp;:         <INPUT TYPE=BUTTON NAME="b5" VALUE="Afficher"           onClick="alert(obtenirValeurNoeud(obtenirNoeud('etat')));">         <P>Valeur du premier noeud de nom "etat" fils du noeud racine du document XML&nbsp;:         <INPUT TYPE=BUTTON NAME="b6" VALUE="Afficher"           onClick="alert(obtenirValeurNoeud(obtenirNoeudFils(obtenirNoeudRacine(), 'etat')));">                <P>Nom du noeud p&egrave;re du premier noeud de nom "etat"&nbsp;:         <INPUT TYPE=BUTTON NAME="b7" VALUE="Afficher"           onClick="alert(obtenirNomNoeud(obtenirNoeudPere(obtenirNoeud('etat'))));">                <P>Compter le nombre de noeuds de nom "etat"&nbsp;:         <INPUT TYPE=BUTTON NAME="b8" VALUE="Compter"           onClick="alert(compterNoeuds('etat'));">                        <P>Rechercher l'ann&eacute;e d'entr&eacute;e dans l'Union d'un Etat europ&eacute;en         en fonction de son nom&nbsp;:       <TABLE SUMMARY="table" BORDER=0 CELLSPACING=5 CELLPADDING=5><TR>         <TD>Etat&nbsp;:</TD>         <TD><INPUT TYPE=TEXT NAME="t1" VALUE="Allemagne" SIZE=40 MAXLENGTH=40></TD>         <TD><INPUT TYPE=BUTTON NAME="b9" VALUE="Rechercher"           onClick="document.f1.t2.value=obtenirValeurAttribut(rechercherNoeud('etat', document.f1.t1.value), 'entree');">         </TD>       </TR><TR>         <TD>Entr&eacute;e dans l'Union&nbsp;:</TD>         <TD><INPUT TYPE=TEXT NAME="t2" VALUE="" SIZE=4></TD>         <TD></TD>       </TR></TABLE>                  <P>Rechercher un Etat europ&eacute;en en fonction de sa capitale&nbsp;:       <TABLE SUMMARY="table" BORDER=0 CELLSPACING=5 CELLPADDING=5><TR>         <TD>Capitale&nbsp;:</TD>         <TD><INPUT TYPE=TEXT NAME="t3" VALUE="Riga" SIZE=40 MAXLENGTH=40></TD>         <TD><INPUT TYPE=BUTTON NAME="b10" VALUE="Rechercher"           onClick="document.f1.t4.value=obtenirValeurNoeud(rechercherNoeudParAttribut('etat', 'capitale', document.f1.t3.value));">         </TD>       </TR><TR>         <TD>Etat&nbsp;:</TD>         <TD><INPUT TYPE=TEXT NAME="t4" VALUE="" SIZE=40></TD>         <TD></TD>       </TR></TABLE>     </FORM>        </BODY> </HTML>