当前位置: 首页 > news >正文

javascript 中的xml dom

首先给出跨浏览器的对document的创建,跨ie和firefox, xmldom.js文件

function  XmlDom()  {
    
if (window.ActiveXObject) {
        
var arrSignatures = ["MSXML2.DOMDocument.5.0""MSXML2.DOMDocument.4.0",
                             
"MSXML2.DOMDocument.3.0""MSXML2.DOMDocument",
                             
"Microsoft.XmlDom"];
                         
        
for (var i=0; i < arrSignatures.length; i++{
            
try {
        
                
var oXmlDom = new ActiveXObject(arrSignatures[i]);
            
                
return oXmlDom;
        
            }
 catch (oError) {
                
//ignore
            }

        }
          

        
throw new Error("MSXML is not installed on your system."); 
              
    }
 else if (document.implementation && document.implementation.createDocument) {
        
        
var oXmlDom = document.implementation.createDocument("","",null);

        oXmlDom.parseError 
= {
            valueOf: 
function () return this.errorCode; },
            toString: 
function () return this.errorCode.toString() }
        }
;
        
        oXmlDom.__initError__();
                
        oXmlDom.addEventListener(
"load"function () {
            
this.__checkForErrors__();
            
this.__changeReadyState__(4);
        }
false);

        
return oXmlDom;        
        
    }
 else {
        
throw new Error("Your browser doesn't support an XML DOM object.");
    }

}


if  (isMoz)  {

    Document.prototype.readyState 
= 0;
    Document.prototype.onreadystatechange 
= null;

    Document.prototype.__changeReadyState__ 
= function (iReadyState) {
        
this.readyState = iReadyState;

        
if (typeof this.onreadystatechange == "function"{
            
this.onreadystatechange();
        }

    }
;

    Document.prototype.__initError__ 
= function () {
        
this.parseError.errorCode = 0;
        
this.parseError.filepos = -1;
        
this.parseError.line = -1;
        
this.parseError.linepos = -1;
        
this.parseError.reason = null;
        
this.parseError.srcText = null;
        
this.parseError.url = null;
    }
;
    
    Document.prototype.__checkForErrors__ 
= function () {

        
if (this.documentElement.tagName == "parsererror"{

            
var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

            reError.test(
this.xml);
            
            
this.parseError.errorCode = -999999;
            
this.parseError.reason = RegExp.$1;
            
this.parseError.url = RegExp.$2;
            
this.parseError.line = parseInt(RegExp.$3);
            
this.parseError.linepos = parseInt(RegExp.$4);
            
this.parseError.srcText = RegExp.$5;
        }

    }
;
    
        
    Document.prototype.loadXML 
= function (sXml) {
    
        
this.__initError__();
    
        
this.__changeReadyState__(1);
    
        
var oParser = new DOMParser();
        
var oXmlDom = oParser.parseFromString(sXml, "text/xml");
 
        
while (this.firstChild) {
            
this.removeChild(this.firstChild);
        }


        
for (var i=0; i < oXmlDom.childNodes.length; i++{
            
var oNewNode = this.importNode(oXmlDom.childNodes[i], true);
            
this.appendChild(oNewNode);
        }

        
        
this.__checkForErrors__();
        
        
this.__changeReadyState__(4);

    }
;
    
    Document.prototype.__load__ 
= Document.prototype.load;

    Document.prototype.load 
= function (sURL) {
        
this.__initError__();
        
this.__changeReadyState__(1);
        
this.__load__(sURL);
    }
;
    
    Node.prototype.__defineGetter__(
"xml"function () {
        
var oSerializer = new XMLSerializer();
        
return oSerializer.serializeToString(this"text/xml");
    }
);

}

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

< html >
    
< head >
        
< title > Cross-Browser XML DOM Example </ title >
        
< script  type ="text/javascript"  src ="xmldom.js" ></ script >
    
</ head >
    
< body >
        
< p > This example loads an invalid XML file and displays an error message in an alert. </ p >
        
< script  type ="text/javascript" >
        
var oXmlDom = new XmlDom();
        oXmlDom.onreadystatechange 
= function () {
            
if (oXmlDom.readyState == 4{

                
if (oXmlDom.parseError != 0{
                    
var oError = oXmlDom.parseError;
                    alert(
"An error occurred:\nError Code: "
                          
+ oError.errorCode + "\n"
                          
+ "Line: " + oError.line + "\n"
                          
+ "Line Pos: " + oError.linepos + "\n"
                          
+ "Reason: " + oError.reason);

                }

            }

        }
;
        
        oXmlDom.load(
"errors.xml");

        
</ script >
 
 
    
</ body >
</ html >

转载于:https://www.cnblogs.com/sw22225458/archive/2008/01/27/1055107.html

相关文章:

  • .NET中统一的存储过程调用方法(收藏)
  • Sun全球媒体高峰论坛开幕 CEO称重回快速增长轨道
  • 电脑总是丢失文件
  • ATL7.0 中 已经没有了CComModule
  • C++编程规范
  • RedHat ip配不上
  • Silverlight2.0 将直接支持中文
  • Win32汇编学习笔记(二)
  • 重新回归
  • 企业信息化:Web2.0带来的启示
  • 综合布线图书大全
  • MVP峰会,园子里有谁要去西雅图的,进来给点意见(请dudu留首页)
  • 获得库每个表的记录数和容量,sp_msforeachtable是MS未公开的存储过程
  • 狂笑不止
  • 教你如何进入内网
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Intervention/image 图片处理扩展包的安装和使用
  • python 学习笔记 - Queue Pipes,进程间通讯
  • spring boot下thymeleaf全局静态变量配置
  • SQLServer插入数据
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue脚手架vue-cli
  • Webpack 4 学习01(基础配置)
  • 从0实现一个tiny react(三)生命周期
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 两列自适应布局方案整理
  • 码农张的Bug人生 - 初来乍到
  • 前端之React实战:创建跨平台的项目架构
  • 微信小程序填坑清单
  • 微信小程序--------语音识别(前端自己也能玩)
  • C# - 为值类型重定义相等性
  • 带你开发类似Pokemon Go的AR游戏
  • 湖北分布式智能数据采集方法有哪些?
  • ​你们这样子,耽误我的工作进度怎么办?
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (0)Nginx 功能特性
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (多级缓存)多级缓存
  • (二)JAVA使用POI操作excel
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)3D模板阴影原理
  • (转)C#调用WebService 基础
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net 7 上传文件踩坑
  • .NET Core 成都线下面基会拉开序幕
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net wcf memory gates checking failed
  • .NET 命令行参数包含应用程序路径吗?
  • .NET中GET与SET的用法
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @RequestBody与@ResponseBody的使用