اجعل معالجة XML الخاصة بـ Firefox متوافقة مع طريقة معالجة عقدة IE. الرموز المحددة مذكورة أدناه.
الكود المحدد هو كما يلي.
<!DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<أتش تي أم أل>
<الرأس>
< TITLE > جعل معالجة XML في Firefox متوافقة مع طريقة SelectSingleNode الخاصة بـ IE </ TITLE >
< اسم التعريف ="المؤلف" المحتوى ="emu">
< اسم التعريف ="الكلمات الرئيسية" المحتوى ="فايرفوكس IE حدد عقدة واحدة حدد العقد" >
< META NAME ="Description" CONTENT ="تمكين فايرفوكس لدعم طريقة SelectSingleNode SelectNodes" >
< لغة البرنامج النصي = "جافا سكريبت">
<!--
var isIE = !!
function parseXML(st){
إذا (إيسي) {
var result = new ActiveXObject( "microsoft.XMLDOM");
result.loadXML(st);
} آخر {
var parser = new DOMParser();
نتيجة فار = parser.parseFromString(st, " text/xml " );
}
نتيجة الإرجاع؛
}
إذا (! isIE){
فار السابق؛
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
يحاول {
إرجاع XMLSerializer().serializeToString (هذا) الجديد ؛
} قبض (على سبيل المثال){
var d = document.createElement("div");
d.appendChild( this .cloneNode( true ));
إرجاع d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
يحاول {
إرجاع XMLSerializer().serializeToString (هذا) الجديد ؛
} قبض (على سبيل المثال){
var d = document.createElement("div");
d.appendChild( this .cloneNode( true ));
إرجاع d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( "text" , function (){
قم بإرجاع هذا .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__( " text " , function (){
قم بإرجاع هذا .textContent
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (XPath){
فار x = هذا .selectNodes(xpath)
إذا كان ( ! x x.length < 1 ) يعود فارغًا ;
إرجاع 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);
تم العثور على فار = [];
فار الدقة؛
بينما (res = result.iterateNext())
Found.push(res);
تم العثور على العودة؛
}
}
var x = parseXML( " <people> <person first-name= " eric " middle-initial= " H " last-name= " jung " > <address street= " 321 South st " city= " denver " State= " co " Country= " usa " /> <address street= " 123 main st " city= " arlington " State= " ma " Country= " 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= " سياتل " State= " wa " Country= " usa " /> <address street= " 321 South avenue " city= " denver " State= " co " Country= " usa " /> </person></people> " );
تنبيه( " بحث في الكل الاسم الأخير للشخص (الاسم الأخير) ")
نتائج var = x.selectNodes( " //person/@last-name " );
لـ ( فار i = 0 ; i < results.length;i ++ )
تنبيه ("الشخص #" + i + " له الاسم الأخير" + results[i].nodeValue)؛
تنبيه("البحث عن الشخص الثاني");
// يستخدم IE الرقم 0 كقاعدة منخفضة، وليس 1
إذا (! document.all)
results = x.selectSingleNode( " /people/person[2] " );
آخر
results = x.selectSingleNode( " /people/person[1] " );
تنبيه (results.xml)
تنبيه ("احصل على الشخص الذي يقع عنوانه في شارع دونفر")؛
results = x.selectNodes( " //person[address/@city='denver'] " );
for ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// احصل على جميع العناوين التي تحتوي على الجنوب في أسماء شوارعها
results = x.selectNodes( " //address[contains(@street, 'south')] " );
تنبيه(النتائج[0].xml);
} آخر {
تنبيه ("لا يدعم IE طريقة الاستعلام //address[contains(@street, 'south')]"")
}
// -->
</النص>
</الرأس>
<الجسم>
</الجسم>
</ HTML >
مثال مقتبس من http://kb.mozillazine.org/XPath . كما ترون من المثال، فإن دعم IE لـ xpath لا يزال محدودًا.