具体代码如下。
<! 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的支持还是有限度的。
以上就是firefox对xml的处理兼容ie的节点处理方法的内容。
