站长学院通行证

 

返回“站长学院”网站首页

 当前位置 → 中国站长学院网络编程Xml编程xml技巧 → 浏览正文


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


作者:中国站长学院[收集整理]     来源:互联网转载     点击数:     更新时间:2008年03月16日

【字体: 】           【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色) 】    【收藏本文】   【打印


使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的支持还是有限度的。


责任编辑:中国站长学院

注册投稿

收藏本文到  >>>

相关文章

模板教程【Pagetitle 标记】04/11 
模板教程【Prenext 标记】(十04/11 
模板教程【Pagebreak 标记】04/11 
模板教程【Pagelist 标记】(04/11 
模板教程【List 标记】(十一)04/11 
模板教程【Channelartlis04/11 
模板教程【Mynews 标记】(九)04/11 
模板教程【Flink 标记】(八)04/11 
模板教程【Vote 标记】(七)04/11 
模板教程【Mytag 标记】(六)04/11 
模板教程【Type 标记】(四)04/11 
模板教程【Channel 标记】(三04/11 
模板教程【Field 标记】(二)04/11 
模板教程【Arclist 标记使用实04/11 
DedeCMS模板制作使用实例教程序04/11 
从零开始学DedeCms模板,模板制04/11 

推荐导读

热门资讯

资讯快报

论坛新贴

返回首页

关于我们 - 帮助(?) - 广告服务 - 诚征英才 - 友情链接 - 网站地图 - 站长BLOG

返回网站顶部

Copyright © 2007 中国站长学院(CNZZXY.COM). All Rights Reserved
站长学院服务资咨热线:0755-84289786    业务合作:(0)13554938953  (0)13423986856    网络宽带及主机提供:深圳傲网科技
粤ICP备08006968号   站长:忧郁的秋天(向管理员发邮件)   站长交流QQ群①:1815595   站长交流QQ群②:32960074