Rendre le traitement XML de Firefox compatible avec la méthode de traitement des nœuds d'IE. Les codes spécifiques sont répertoriés ci-dessous.
Le code spécifique est le suivant.
<! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//FR" >
<HTML>
<TÊTE>
< TITLE > Rendre le traitement XML de Firefox compatible avec la méthode selectSingleNode selectNodes d'IE </ TITLE >
< META NOM ="Auteur" CONTENT ="emu" >
< META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="Description" CONTENT ="Activer Firefox pour prendre en charge la méthode selectSingleNode selectNodes" >
< LANGUE DU SCRIPT ="javascript" >
<!--
var estIE = !! document.all;
fonction parseXML(st){
si (estIE){
var résultat = new ActiveXObject( " microsoft.XMLDOM " );
résultat.loadXML(st);
} autre {
var analyseur = new DOMParser();
var résultat = parser.parseFromString(st, " text/xml " );
}
renvoyer le résultat ;
}
si ( ! estIE){
varex;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
essayer {
renvoie un nouveau XMLSerializer().serializeToString(this);
} attraper (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
retourner d.innerHTML ;
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
essayer {
renvoie un nouveau XMLSerializer().serializeToString(this);
} attraper (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
retourner d.innerHTML ;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( " texte " , fonction (){
renvoie ce .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__( " texte " , fonction (){
renvoie ce .textContent
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = fonction (XPath){
var x = ce .selectNodes(xpath)
if ( ! x x.length < 1 ) renvoie null ;
retourner x[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = fonction (xpath){
var xpe = new XPathEvaluator();
var nsResolver = xpe.createNSResolver( this .ownerDocument == null ?
this .documentElement : this .ownerDocument.documentElement);
var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
var trouvé = [];
var res;
while (res = result.iterateNext())
trouvé.push(res);
retour trouvé ;
}
}
var x = parseXML( " <personnes> <prénom de la personne= " eric " initiale-milieu = " H " nom de famille= " jung " > <adresse rue= " 321 rue sud " city= " denver " state= " co " country= " usa " /> <adresse rue= " 123 main st " city= " arlington " state= " ma " country= " usa " /> </person> <person first-name= " jed " last-name= " brown " > <adresse rue= " 321 north st " city= " atlanta " state= " ga " country= " usa " /> <adresse rue= " 123 west st " city= " seattle " state= " wa " country= " usa " /> <address street= " 321 south avenue " city= " denver " state= " co " country= " usa " /> </person></people> " );
alert( " Rechercher tout Nom de famille de la personne (nom de famille) " )
var results = x.selectNodes( " //person/@last-name " );
pour ( var i = 0 ; i < results.length;i ++ )
alert( " Personne # " + i + " a le nom de famille " + results[i].nodeValue);
alert( "Rechercher la deuxième personne" );
// IE utilise 0 comme base d'indice, pas 1
si ( ! document.all)
résultats = x.selectSingleNode( " /people/person[2] " );
autre
résultats = x.selectSingleNode( " /people/person[1] " );
alert(results.xml)
alert( "Obtenir la personne dont l'adresse est sur la rue Donver" );
results = x.selectNodes( " //person[address/@city='denver'] " );
pour ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// Récupère toutes les adresses avec le sud dans leur nom de rue
results = x.selectNodes( " //adresse[contient (@street, 'south')] " );
alerte(results[ 0 ].xml);
} autre {
alert( "IE ne prend pas en charge la méthode de requête //address[contains (@street, 'south')]" )
}
// -->
</SCRIPT>
</HEAD>
<CORPS>
</CORPS>
</ HTML >
Exemple cité sur http://kb.mozillazine.org/XPath . Comme vous pouvez le voir sur l'exemple, la prise en charge d'IE pour XPath est encore limitée.