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é pour ne
pas prendre en compte le code Javascript. Dans ce dernier cas, vous pouvez modifier la
configuration dans les préfé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" :
<INPUT TYPE=BUTTON NAME="b1" VALUE="Charger"
onClick="alert(chargerFichierXML('./extra/europe.xml'));">
<P>Vérifier le chargement du fichier "europe.xml" :
<INPUT TYPE=BUTTON NAME="b2" VALUE="Vérifier"
onClick="if (verifierChargementXML()) alert('Chargement des données OK.');
else alert('Chargement des données incomplet.');">
<P>Commentaires du document XML :
<INPUT TYPE=BUTTON NAME="b3" VALUE="Afficher"
onClick="alert(obtenirCommentaires());">
<P>Nom du noeud racine du document XML :
<INPUT TYPE=BUTTON NAME="b4" VALUE="Afficher"
onClick="alert(obtenirNomNoeud(obtenirNoeudRacine()));">
<P>Valeur du premier noeud de nom "etat" :
<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 :
<INPUT TYPE=BUTTON NAME="b6" VALUE="Afficher"
onClick="alert(obtenirValeurNoeud(obtenirNoeudFils(obtenirNoeudRacine(), 'etat')));">
<P>Nom du noeud père du premier noeud de nom "etat" :
<INPUT TYPE=BUTTON NAME="b7" VALUE="Afficher"
onClick="alert(obtenirNomNoeud(obtenirNoeudPere(obtenirNoeud('etat'))));">
<P>Compter le nombre de noeuds de nom "etat" :
<INPUT TYPE=BUTTON NAME="b8" VALUE="Compter"
onClick="alert(compterNoeuds('etat'));">
<P>Rechercher l'année d'entrée dans l'Union d'un Etat européen
en fonction de son nom :
<TABLE SUMMARY="table" BORDER=0 CELLSPACING=5 CELLPADDING=5><TR>
<TD>Etat :</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ée dans l'Union :</TD>
<TD><INPUT TYPE=TEXT NAME="t2" VALUE="" SIZE=4></TD>
<TD></TD>
</TR></TABLE>
<P>Rechercher un Etat européen en fonction de sa capitale :
<TABLE SUMMARY="table" BORDER=0 CELLSPACING=5 CELLPADDING=5><TR>
<TD>Capitale :</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 :</TD>
<TD><INPUT TYPE=TEXT NAME="t4" VALUE="" SIZE=40></TD>
<TD></TD>
</TR></TABLE>
</FORM>
</BODY>
</HTML>
Related examples in the same category