emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

 

<! 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.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的支持还是有限度的。
posted on 2006-02-27 17:18 emu 阅读(2221) 评论(0)  编辑  收藏 所属分类: DHTML和JAVASCRIPT 技术

只有注册用户登录后才能发表评论。


网站导航: