IE Firefox ---
yes other---
no
/*
* 解析XML
*/
var XML = (function() {
var constant = {
hasActiveX: (typeof ActiveXObject != "undefined"),
useXmlHttp: (typeof XMLHttpRequest != "undefined"),
hasXmlDom: (document.implementation && document.implementation.hasFeature("XML", "1.0")),
hasDomLS: (document.implementation && document.implementation.hasFeature("LS", "3.0"))
};
function createXMLHttpRequest() {
if (constant.hasActiveX) {
var version = ["MSXML2.XmlHttp.6.0", "MSXML2.XmlHttp.3.0"];
for (var i = 0; i < version.length; i++) {
try {
var req = new ActiveXObject(version[i]);
return req;
} catch (error) {
}
}
} else if (constant.useXmlHttp) {
return new XMLHttpRequest();
}
throw new Error("XMLHttp object could not be created.");
}
function createDocument() {
if (constant.hasXmlDom) {
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 if (constant.hasActiveX) {
var aVersions = ["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0","Microsoft.XmlDom"];
for (var i = 0; i < aVersions.length; i++) {
try {
var oXmlDom = new ActiveXObject(aVersions[i]);
return oXmlDom;
} catch (oError) {}
}
throw new Error("MSXML is not installed.");
} else {
throw new Error("Your browser doesn't support an XML DOM document.");
}
};//end createDocument
var oDomDocument = null;
if (typeof XMLDocument != "undefined") {
oDomDocument = XMLDocument;
} else if (typeof Document != "undefined") {
oDomDocument = Document;
}
if (oDomDocument) {
oDomDocument.prototype.readyState = 0;
oDomDocument.prototype.onreadystatechange = null;
oDomDocument.prototype.__changeReadyState__ = function (iReadyState) {
this.readyState = iReadyState;
if (typeof this.onreadystatechange == "function") {
this.onreadystatechange();
}
};
oDomDocument.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;
};
//function load the DOM of another document
oDomDocument.prototype.__loadDom__ = function (oXmlDom) {
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);
}
};
try {
if (typeof oDomDocument.prototype.async != "boolean") {
oDomDocument.prototype.async = true;
}
} catch (e) {}
oDomDocument.prototype.load = function (sURL) {
this.__initError__();
var oHttp = createXMLHttpRequest();
var oDom = this;
oHttp.open("get", sURL, this.async);
if (this.async) {
oHttp.onreadystatechange = function () {
if (oHttp.readyState == 4) {
oHttp.onreadystatechange = null;
oDom.__loadDom__(oHttp.responseXML);
oDom.__checkForErrors__();
}
oDom.__changeReadyState__(oHttp.readyState);
};
}
oHttp.send(null);
if (!this.async) oDom.__loadDom__(oHttp.responseXML);
};
if (constant.hasDomLS) {
oDomDocument.prototype.__checkForErrors__ = function (oError) {
if (!oError) return;
this.parseError.errorCode = -999999;
this.parseError.reason = oError.message;
this.parseError.url = oError.location.uri;
this.parseError.line = oError.location.lineNumber;
this.parseError.linepos = oError.location.columnNumber;
this.parseError.srcText = (oError.location.relatedNode)?"Around " + oError.location.relatedNode.nodeName:oError.type;
};
} else {
if (!window.opera) {
oDomDocument.prototype.__checkForErrors__ = function (oEx) {
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;
}
};
}
}
}
//public method
return {
isSupported: function() {
return constant.hasActiveX || constant.hasXmlDom;
},
read: function(sURL, fnCallback) {
if(this.isSupported()) {
var oXmlDom = createDocument();
oXmlDom.onreadystatechange = function() {
if (oXmlDom.readyState == 4) {
if(oXmlDom.parseError.errorCode == 0) {
fnCallback(oXmlDom, oXmlDom.documentElement);
}else {
alert("error");
}
}
}
oXmlDom.async = true;
oXmlDom.validateOnParse = false;
oXmlDom.load(sURL);
}else {
throw new Error("Your browser doesn't support an XML DOM object.");
}
},
getNode: function(node) {
if (node.nodeType == 1) {
return node;
} else {
var n = node.nextSibling;
while (n.nodeType != 1 && n.nextSibling != null) {
n = n.nextSibling;
}
return (n.nodeType == 1) ? n : false;
}
},
hasChildren: function() {
return this.getChildNodesLength(node) > 0;
},
getChildNodesLength: function(parentNode) {
var oNodes = parentNode.childNodes;
var n = 0;
for (var i = 0, len = oNodes.length; i < len; i++) if (oNodes[i].nodeType == 1) n++;
return n;
},
//读取节点文本值
getText: function(node) {
return node.firstChild.nodeValue;
}
}
})();
测试XML:
=============================
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<script type="text/javascript" src="XML.min.js"></script>
</head>
<body>
<div id="result"></div>
<script type="text/javascript">
XML.read("country.xml", function(oXmlDom, root) {
parseInfo(root);
print();
});
function parseInfo(root) {
for (var i = 0; i < root.childNodes.length; i++) {
if (root.childNodes[i].nodeType == 1) {
var node = root.childNodes.item(i);
var id = node.getAttribute("id");
var pid = node.getAttribute("pid");
var value = XML.getText(node);
addNode(id, pid, value);
if (node.hasChildNodes()) {
parseInfo(node);
}
}
}
}
var list = new Array();
function addNode(id, pid, value) {
list[list.length] = new Node(id, pid, value);
}
function Node(id, pid, value) {
this.id = id;
this.pid = pid;
this.value = value;
}
function print() {
var tmp = [];
for (var i = 0; i < list.length; i++) {
var node = list[i];
tmp[tmp.length] = "[id=" + node.id + " pid=" + node.pid + " value=" + node.value + "] ";
}
document.getElementById("result").innerHTML = tmp.join("");
}
</script>
</body>
</html>
输出结果:
=============================
[id=1 pid=0 value=中国]
[id=2 pid=1 value=北京]
[id=3 pid=1 value=上海]
[id=4 pid=1 value=辽宁]
[id=5 pid=4 value=沈阳]
[id=6 pid=4 value=大连]
[id=7 pid=4 value=鞍山]
[id=8 pid=1 value=天津]
分享到:
相关推荐
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
利用javascript解析XML,来查询xml数据
2. **JavaScript解析XML**:JavaScript提供了两种主要的方式来解析XML,即`DOMParser`和`XMLHttpRequest`(也称为Ajax)。`DOMParser`可以将XML字符串转化为DOM对象,方便后续操作;`XMLHttpRequest`则可以异步加载...
总结来说,实现JavaScript解析XML以创建多级级联下拉列表涉及的主要知识点包括:JavaScript基础、XML文件结构与解析、DOM操作、事件监听以及动态生成HTML元素。通过这些技术,可以构建出交互性强、用户体验良好的Web...
总结,JavaScript解析XML文档成树菜单涉及到DOM解析、XMLHttpRequest或fetch请求、DOM遍历、HTML结构生成、事件处理等多个技术点。具体实现可能因XML结构和需求而异,但基本流程是相似的。阅读原博客(288976)可以...
JAVASCRIPT解析XML的方法总结.pdf
### JavaScript解析XML的关键方法 在给定的文件中,主要讨论了如何使用JavaScript来解析XML文件,并提供了一个具体的例子。以下是对这些关键方法的详细解释: #### 1. 加载XML文件 JavaScript解析XML的第一步是...
JavaScript解析xml数据
总结来说,JavaScript解析XML是Web开发中的重要技能,它允许开发者动态地处理和展示来自服务器的结构化数据,提高用户体验。DOM和SAX是两种主要的解析策略,其中DOM适用于小型XML文档,而SAX更适合处理大型文档。...
javascript解析xml方法,考虑多种浏览器
2. **JavaScript解析XML**:在JavaScript中,`XMLHttpRequest`对象可以用来从服务器获取XML文件。一旦文件加载完成,我们可以使用`responseXML`属性来访问XML文档。然后,通过`documentElement`和`...
JavaScript是Web开发中不可或缺...通过分析和理解这些代码,你可以更好地掌握JavaScript解析XML、SSH登录以及MVC架构的应用。记住,实践是检验理论的最好方式,尝试自己动手实现这些功能,将有助于深化理解和提升技能。
JavaScript解析XML文档成树菜单.chm
JavaScript提供了DOMParser API和ActiveXObject(仅限于Internet Explorer)来解析XML。以下是对这个主题的详细阐述: 首先,我们需要了解XML(eXtensible Markup Language),它是一种用于存储和传输数据的标记...
JS 解析 XML 文件 作为一名 IT 行业大师,我将从给定的...使用 JavaScript 解析 XML 文件需要了解 XML 文档的结构和各个节点的类型,选择合适的解析方法,考虑浏览器兼容性问题,并掌握相关的 JavaScript 语法和方法。
总的来说,JavaScript解析XML字符串的关键在于处理不同浏览器的兼容性问题,使用`try...catch`结合`ActiveXObject`和`DOMParser`可以有效地实现这一目标。同时,理解XML文档的结构和DOM(文档对象模型)的概念对于...
### JavaScript 对 XML 文件解析知识点详解 #### 一、XML 文件解析背景及意义 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记数据的语言,主要用于传输和存储数据。在 Web 开发中,XML 常被...