Сделайте обработку XML Firefox совместимой с методом обработки узлов IE. Конкретные коды перечислены ниже.
Конкретный код выглядит следующим образом.
<! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<ГОЛОВКА>
< TITLE > Сделать обработку XML в Firefox совместимой с методом selectSingleNode selectNodes в IE </ TITLE >
< МЕТА-ИМЯ ="Автор" СОДЕРЖИМОЕ ="emu" >
< МЕТА-ИМЯ ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="Описание" CONTENT ="Включить Firefox для поддержки метода selectSingleNode selectNodes" >
< ЯЗЫК СКРИПТА ="javascript" >
<!--
вар isIE = !! document.all;
функция parseXML(st){
если (ISIE){
var result = новый ActiveXObject("microsoft.XMLDOM");
результат.loadXML(ст);
} еще {
вар синтаксический анализатор = новый DOMParser();
var result = parser.parseFromString(st, "text/xml");
}
вернуть результат;
}
если ( ! isIE){
вар бывший;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
пытаться {
вернуть новый XMLSerializer().serializeToString(this);
} поймать (бывший){
var d = document.createElement("div");
d.appendChild( this .cloneNode( true ));
вернуть d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
пытаться {
вернуть новый XMLSerializer().serializeToString(this);
} поймать (бывший){
var d = document.createElement("div");
d.appendChild( this .cloneNode( true ));
вернуть d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( "текст", функция (){
верните этот .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__( " текст " , функция () {
верните этот .textContent
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = функция (XPath){
var x = это .selectNodes(xpath)
если (! x x.length <1) вернуть ноль;
вернуть х[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = функция (xpath){
вар xpe = новый XPathEvaluator();
var nsResolver = xpe.createNSResolver( this .ownerDocument == null ?
этот .documentElement: этот .ownerDocument.documentElement);
результат вар = xpe.evaluate(xpath, this, nsResolver, 0, null);
вар найден = [];
вар рез;
в то время как (res = result.iterateNext())
Found.push(рез);
возврат найден;
}
}
var x = parseXML( " <люди> <имя человека= " eric " middle-initial= " H " Last-name= " jung " > <address street= " 321 South St " city= " Denver "state= " co " Country= " USA " /> <адрес 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 " /> <адрес Street= " 123 West St " City= " Сиэтл " State= " wa " Country= " USA " /> <address street= " 321 South Avenue " city= " denver "state= " co " Country= " usa " /> </person></people> " );
alert( " Искать все Фамилия человека (фамилия) » )
var results = x.selectNodes( " //person/@last-name ");
for (var i = 0; i <results.length;i ++)
alert( " Человек # " + i + " имеет фамилию " + results[i].nodeValue);
alert("Ищем второго человека");
// IE использует 0 в качестве базы индекса, а не 1
если ( ! document.all)
результаты = x.selectSingleNode( "/people/person[2]");
еще
результаты = x.selectSingleNode( "/people/person[1]");
alert(results.xml)
alert( "Получите человека, чей адрес находится на улице Донвер" );
результаты = 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);
} еще {
alert( "IE не поддерживает метод запроса //address[contains(@street, 'south')]" )
}
// -->
</ СКРИПТ >
</HEAD>
<ТЕЛО>
</ТЕЛО>
</ HTML >
Пример взят с http://kb.mozillazine.org/XPath . Как видно из примера, поддержка xpath в IE по-прежнему ограничена.