WEB开发网
开发学院WEB开发Xml FireFox对XML的处理兼容IE的节点处理方法 阅读

FireFox对XML的处理兼容IE的节点处理方法

 2008-01-14 11:25:10 来源:WEB开发网   
核心提示:使Firefox对xml的处理兼容IE的节点处理方法,具体代码列出如下,FireFox对XML的处理兼容IE的节点处理方法,具体代码如下,<! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < HTML

使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 >

例子引自 http://kb.mozillazine.org/XPath 。从例子可以看到,IE对xpath的支持还是有限度的。

Tags:FireFox XML 处理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接