Machen Sie die XML-Verarbeitung von Firefox mit der Knotenverarbeitungsmethode des IE kompatibel. Die spezifischen Codes sind unten aufgeführt.
Der spezifische Code lautet wie folgt.
<! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<KOPF>
< TITLE > Machen Sie die XML-Verarbeitung von Firefox mit der selectSingleNode-selectNodes-Methode des IE kompatibel </ TITLE >
< META NAME ="Autor" CONTENT ="emu" >
< META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="Description" CONTENT ="Firefox zur Unterstützung der Methode selectSingleNode selectNodes aktivieren" >
< SCRIPT LANGUAGE ="javascript" >
<!--
var isIE = !! document.all;
function parseXML(st){
if (isIE){
var result = new ActiveXObject( " microsoft.XMLDOM " );
result.loadXML(st);
} anders {
var parser = new DOMParser();
var result = parser.parseFromString(st, " text/xml " );
}
Ergebnis zurückgeben;
}
if ( ! isIE){
var ex;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
versuchen {
return new XMLSerializer().serializeToString( this );
} fangen (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
versuchen {
return new XMLSerializer().serializeToString( this );
} fangen (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( " text " , function (){
Geben Sie diesen .firstChild.textContent zurück
});
Element.prototype.__proto__.__defineGetter__( " text " , function (){
Geben Sie diesen .textContent zurück
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (XPath){
var x = this .selectNodes(xpath)
if (! x x.length < 1) return null;
return x[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (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 gefunden = [];
var res;
while (res = result.iterateNext())
gefunden.push(res);
Rückgabe gefunden;
}
}
var x = parseXML( " <people> <person first-name= " eric " middle-initial= " H " last-name= " jung " > <address street= " 321 South St " city= " denver " state= " co " land= " usa " /> <address street= " 123 main st " city= " arlington " state= " ma " land= " usa " /> </person> <person first-name= " jed " last-name= " brown " > <address street= " 321 North St " city= " atlanta " state= " ga " Country= " usa " /> <address street= " 123 West St " city= " Seattle " state= " wa " Country= " usa " /> <address street= " 321 South Avenue " city= " denver " state= " co " Country= " usa " /> </person></people> " );
Alert( " Alle durchsuchen Nachname der Person (last-name)")
var results = x.selectNodes( " //person/@last-name " );
for ( var i = 0 ; i < results.length;i ++ )
Alert( " Person # " + i + " hat den Nachnamen " + results[i].nodeValue);
Alert( "Suche nach der zweiten Person" );
// IE verwendet 0 als Indexbasis, nicht 1
if ( ! document.all)
results = x.selectSingleNode( " /people/person[2] " );
anders
results = x.selectSingleNode( " /people/person[1] " );
Alert(results.xml)
Alert( "Ermitteln Sie die Person, deren Adresse in der Donver Street liegt" );
results = x.selectNodes( " //person[address/@city='denver'] " );
for ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// Alle Adressen abrufen, deren Straßennamen „South“ enthalten
results = x.selectNodes( " //address[contains(@street, 'south')] " );
Alert(Ergebnisse[ 0 ].xml);
} anders {
Alert( „IE unterstützt die Abfragemethode //address[contains(@street, ‚south‘)] nicht“ )
}
// -->
</ SCRIPT >
</HEAD>
<KÖRPER>
</BODY>
</ HTML >
Beispiel zitiert aus http://kb.mozillazine.org/XPath . Wie Sie dem Beispiel entnehmen können, ist die Unterstützung von XPath durch den IE noch begrenzt.