`
baby69yy2000
  • 浏览: 187685 次
  • 性别: Icon_minigender_1
  • 来自: 自己输入城市...
社区版块
存档分类
最新评论

javascript解析xml

    博客分类:
  • AJAX
阅读更多
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=天津]
  • XML.rar (4.5 KB)
  • 下载次数: 24
分享到:
评论

相关推荐

    使用javascript解析xml文件或xml格式字符串中文WORD版

    资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...

    利用javascript解析XML

    利用javascript解析XML,来查询xml数据

    JavaScript解析XML文件,在网页上以目录树的形式显示

    2. **JavaScript解析XML**:JavaScript提供了两种主要的方式来解析XML,即`DOMParser`和`XMLHttpRequest`(也称为Ajax)。`DOMParser`可以将XML字符串转化为DOM对象,方便后续操作;`XMLHttpRequest`则可以异步加载...

    JavaScript解析XML实现多级级联下拉列表

    总结来说,实现JavaScript解析XML以创建多级级联下拉列表涉及的主要知识点包括:JavaScript基础、XML文件结构与解析、DOM操作、事件监听以及动态生成HTML元素。通过这些技术,可以构建出交互性强、用户体验良好的Web...

    JavaScript解析XML文档成树菜单

    总结,JavaScript解析XML文档成树菜单涉及到DOM解析、XMLHttpRequest或fetch请求、DOM遍历、HTML结构生成、事件处理等多个技术点。具体实现可能因XML结构和需求而异,但基本流程是相似的。阅读原博客(288976)可以...

    JAVASCRIPT解析XML的方法总结.pdf

    JAVASCRIPT解析XML的方法总结.pdf

    JavaScript解析XML的方法总结.

    ### JavaScript解析XML的关键方法 在给定的文件中,主要讨论了如何使用JavaScript来解析XML文件,并提供了一个具体的例子。以下是对这些关键方法的详细解释: #### 1. 加载XML文件 JavaScript解析XML的第一步是...

    JavaScript解析xml数据.js

    JavaScript解析xml数据

    javascript解析XML

    总结来说,JavaScript解析XML是Web开发中的重要技能,它允许开发者动态地处理和展示来自服务器的结构化数据,提高用户体验。DOM和SAX是两种主要的解析策略,其中DOM适用于小型XML文档,而SAX更适合处理大型文档。...

    javascript解析xml方法

    javascript解析xml方法,考虑多种浏览器

    JavaScript解析XML实现两级级联下拉列表

    2. **JavaScript解析XML**:在JavaScript中,`XMLHttpRequest`对象可以用来从服务器获取XML文件。一旦文件加载完成,我们可以使用`responseXML`属性来访问XML文档。然后,通过`documentElement`和`...

    Javascript解析xml文件及SSH实现登录构建结构树例子

    JavaScript是Web开发中不可或缺...通过分析和理解这些代码,你可以更好地掌握JavaScript解析XML、SSH登录以及MVC架构的应用。记住,实践是检验理论的最好方式,尝试自己动手实现这些功能,将有助于深化理解和提升技能。

    JavaScript解析XML文档成树菜单.chm

    JavaScript解析XML文档成树菜单.chm

    javascript解析xml文件

    JavaScript提供了DOMParser API和ActiveXObject(仅限于Internet Explorer)来解析XML。以下是对这个主题的详细阐述: 首先,我们需要了解XML(eXtensible Markup Language),它是一种用于存储和传输数据的标记...

    js解析XML文件

    JS 解析 XML 文件 作为一名 IT 行业大师,我将从给定的...使用 JavaScript 解析 XML 文件需要了解 XML 文档的结构和各个节点的类型,选择合适的解析方法,考虑浏览器兼容性问题,并掌握相关的 JavaScript 语法和方法。

    javascript解析xml字符串的函数

    总的来说,JavaScript解析XML字符串的关键在于处理不同浏览器的兼容性问题,使用`try...catch`结合`ActiveXObject`和`DOMParser`可以有效地实现这一目标。同时,理解XML文档的结构和DOM(文档对象模型)的概念对于...

    javascript 对xml文件解析

    ### JavaScript 对 XML 文件解析知识点详解 #### 一、XML 文件解析背景及意义 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记数据的语言,主要用于传输和存储数据。在 Web 开发中,XML 常被...

Global site tag (gtag.js) - Google Analytics