使Firefox对XML的处理兼容IE的节点处理方法。具体代码列出如下。
具体代码如下。
<! DOCTYPE Html PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN >
< HTML >
< HEAD >
< TITLE > 使firefox对xml的处理兼容IE的selectSingleNode selectNodes方法 </ TITLE >
< META NAME =Author CONTENT =emu >
< META NAME =KeyWords CONTENT =firefox IE selectSingleNode selectNodes >
< META NAME =Description CONTENT =使firefox可以支持selectSingleNode selectNodes方法 >
< script LANGUAGE =javascript >
<!--
var isIE = !! document.all;
function parseXML(st){
if (isIE){
var result = new ActiveXObject( microsoft.XMLDOM );
result.loadXML(st);
} else {
var parser = new DOMParser();
var result = parser.parseFromString(st, text/xml );
}
return result;
}
if ( ! isIE){
var ex;
XMLDocument.prototype.__proto__.__defineGetter__( xml , function (){
try {
return new XMLSerializer().serializeToString( this );
} catch (ex){
var d = document.createElement( div );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__( xml , function (){
try {
return new XMLSerializer().serializeToString( this );
} catch (ex){
var d = document.createElement( div );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( text , function (){
return this .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__( text , function (){
return this .textContent
});
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 found = [];
var res;
while (res = result.iterateNext())
found.push(res);
return found;
}
}
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=\ seattle\ state=\ wa\ country=\ usa\ /> <address street=\ 321 south avenue\ city=\ denver\ state=\ co\ country=\ usa\ /> </person></people> );
alert( 搜索所有人的姓氏(last-name) )
var results = x.selectNodes( //person/@last-name );
for ( var i = 0 ; i < results.length;i ++ )
alert( Person # + i + has the last name + results[i].nodeValue);
alert( 搜索第二个人 );
// IE是以0为下标基数的,而不是1
if ( ! document.all)
results = x.selectSingleNode( /people/person[2] );
else
results = x.selectSingleNode( /people/person[1] );
alert(results.xml)
alert( 获得住址在donver街上的人 );
results = x.selectNodes( //person[address/@city=denver] );
for ( var i = 0 ; i < results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// 获得所有街名中带south的地址
results = x.selectNodes( //address[contains(@street, south)] );
alert(results[ 0 ].xml);
} else {
alert( IE不支持 //address[contains(@street, south)] 这种查询方式 )
}
// -->
</ script >
</ HEAD >
< BODY >
</ BODY >
</ HTML >
例子引自 。从例子可以看到,IE对xpath的支持还是有限度的。