新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → 发一篇跨浏览器的XMLDOM! 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8204 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 发一篇跨浏览器的XMLDOM! 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hexun831012 帅哥哟,离线,有人找我吗?天秤座1983-10-12
      
      
      威望:1
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:800
      积分:5114
      门派:XML.ORG.CN
      注册:2006/12/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hexun831012发送一个短消息 把hexun831012加入好友 查看hexun831012的个人资料 搜索hexun831012在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hexun831012的博客楼主
    发贴心情 发一篇跨浏览器的XMLDOM!

    function createDocument()
    {
     var oDocument = null;
     if(window.ActiveXObject)
     {
      oDocument = new ActiveXObject("Msxml2.DOMDocument");
     }
     else
     {
      oDocument = document.implementation.createDocument("", "", null);
     }
     oDocument.async = false;
     return oDocument;
    }

    if(!window.ActiveXObject)
    {
     Document.prototype.loadXML = function(sXml)
     {
      var oDocument = new DOMParser().parseFromString(sXml, "text/xml");
      for(var i = this.childNodes.length; i > 0; i--)
      {
       this.removeChild(this.childNodes[i]);
      }
      if(oDocument.documentElement.nodeName != "parsererror")
      {
       for(var i = 0; i < oDocument.childNodes.length; i++)
       {
        this.appendChild(oDocument.childNodes[i]);
       }
      }
     }

     Node.prototype.createResolver = function(oResolver)
     {
      if(oResolver)
      {
       return oResolver;
      }
      var oNode = this.documentElement ? this.documentElement : this;
      if(oNode.prefix)
      {
       return document.createNSResolver(oNode);
      }
      else
      {
       return function()
       {
        return oNode.namespaceURI;
       }
      }
     }

     Node.prototype.selectNodes = function(sXpath, oResolver)
     {
      var oSnapshots = new XPathEvaluator().evaluate(sXpath, this, this.createResolver(oResolver), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
      var aNodes = new Array();
      for(var i = 0; i < oSnapshots.snapshotLength; i++)
      {
       aNodes[i] = oSnapshots.snapshotItem(i);
      }
      return aNodes;
     }

     Node.prototype.selectSingleNode = function(sXpath, oResolver)
     {
      return new XPathEvaluator().evaluate(sXpath, this, this.createResolver(oResolver), XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
     }

     Node.prototype.transformNode = function(oStylesheet)
     {
      var oProcessor = new XSLTProcessor();
      oProcessor.importStylesheet(oStylesheet);
      return oProcessor.transformToFragment(this, this.ownerDocument ? this.ownerDocument : this).xml;
     }

     Node.prototype.transformNodeToObject = function(oStylesheet)
     {
      var oProcessor = new XSLTProcessor();
      oProcessor.importStylesheet(oStylesheet);
      return oProcessor.transformToDocument(this);
     }

     Node.prototype.__defineGetter__("text", function()
     {
      return this.textContent;
     })

     Node.prototype.__defineSetter__("text", function(sValue)
     {
      this.textContent = sValue;
     })

     Node.prototype.__defineGetter__("xml", function()
     {
      return new XMLSerializer().serializeToString(this);
     })
    }
    对Moizlla内核的浏览器,可以完全使用IE接口去操作DOM,唯一的区别就是用createDocument()去创建DOM。
    该脚本也并不是完美的,第一,目前还不支持异步,但以后会改进的,第二,在XPath方面Mozilla还不支持复杂表达式,所谓复杂表达式就是跨命名空间的XPath,在Mozilla中复杂表达式的命名空间的映射关系完全依赖于手工输入,所以接口方面会有所差别,第三,transformNodeToObject方法是最头疼的,JS不支持引用传递,而IE偏偏是引用传递的,他用COM写的,不管JS死活拉,哇哇哇,老老实实返回出来多好。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/9 12:14:00
     
     GoogleAdSense天秤座1983-10-12
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/19 5:46:43

    本主题贴数2,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  发一篇跨浏览器的XMLDOM!(2888字) - hexun831012,2008年11月9日
        回复:  申请精华,我就还差2篇了(23字) - hexun831012,2008年11月9日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms