使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 ="Descr< 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;
}
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 >
例子引自 http://kb.mozillazine.org/XPath 。從例子可以看到,IE對xpath的支持還是有限度的。
新聞熱點
疑難解答