`
sammyfun
  • 浏览: 1163521 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

xml json tree

阅读更多
使用本工具类,可以快速从xml和json文件中创建EXT树.
预览:

tree.html:

<SCRIPT src="js/jsontree.js" type=text/javascript></SCRIPT>
<SCRIPT src="js/xmltree.js" type=text/javascript></SCRIPT>
</HEAD>
<BODY>
<div id="jsontree"></div>
<div id="xmltree"></div>
</BODY>
</HTML>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = 'js/ext-2.0/resources/images/default/s.gif';
var jsontree = new createJsonTree("jsontree", "tree.json", function() {
    jsontree.render();
    this.getRootNode().expand();
});

var menuTree = new createXmlTree("xmltree", "tree.xml", function() {
    menuTree.render();
    this.getRootNode().expand();
});
</script>

jsontree.js:
function createJsonTree(el, url, callback) {

    var tree = new Ext.tree.TreePanel({
        el : el,
        animate : true,
        border : false,
        autoHeight : true,
        rootVisible : true
    });

    var treeNodesFromArray = function(parentNode, children) {

        Ext.each(children, function(child) {
            var node = new Ext.tree.TreeNode({
                text : child.text,
                url : child.url,
                color : child.color,
                menuid : child.menuid,
                expanded : child.expanded
            });
            if (!parentNode) {
                tree.setRootNode(node);
            } else {
                parentNode.appendChild(node);
            }

            if (child.children) {
                treeNodesFromArray(node, child.children);
            }
        }, this);
    };

    try {

        var proxy = new Ext.data.HttpProxy({
            url : url
        });

        proxy.on("loadexception", function(o, response, e) {
            if (e)
                throw e;
        });

        proxy.load(null, {
            read : function(response) {
                var treeJson = Ext.util.JSON.decode(response.responseText);
                treeNodesFromArray(null, treeJson);
                callback.call(tree);
            }
        }, function() {
        }, this);

    } catch (e) {

    }
    return tree;
}

xmltree.js
function loadXMLext(xmlStr) {

    if (!xmlStr)
        return null;
    if (window.ActiveXObject) {
        var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
    } else {
        if (document.implementation && document.implementation.createDocument) {
            var xmlDom = document.implementation
                    .createDocument("", "doc", null)
        }
    }
    xmlDom.async = true;
    try {
        xmlDom.loadXML(xmlStr);
    } catch (e) {
        var oParser = new DOMParser();
        xmlDom = oParser.parseFromString(xmlStr, "text/xml");
    }
    return xmlDom;
}

function createXmlTree(el, xmlsrc, callback) {

    var tree = new Ext.tree.TreePanel({
        el : el,
        animate : true,
        border : false,
        autoHeight : true,
        rootVisible : true
    });

    var xmlDom = loadXMLext(xmlsrc);
    try {
        tree.setRootNode(treeNodeFromXml(xmlDom.documentElement || xmlDom));
        callback.call(tree);
    } catch (e) {

        var p = new Ext.data.HttpProxy({
            url : xmlsrc
        });

        p.on("loadexception", function(o, response, e) {
            alert("loadException");
        });

        p.load(null, {
            read : function(response) {
                var doc = response.responseXML;
                tree.setRootNode(treeNodeFromXml(doc.documentElement || doc));
            }
        }, callback, tree);

    }
    return tree;
}

function treeNodeFromXml(XmlEl) {

    var t = ((XmlEl.nodeType == 3) ? XmlEl.nodeValue : XmlEl.tagName);
    if (t.replace(/\s/g, '').length == 0) {
        return null
    }
    var result = {
        text : t
    };

    if (XmlEl.nodeType == 1) {

        Ext.each(XmlEl.attributes, function(a) {
            if (a.nodeName == "href" && XmlEl.hasChildNodes())
                return;
            result[a.nodeName] = a.nodeValue;
        });

        result = new Ext.tree.TreeNode(result);
        Ext.each(XmlEl.childNodes, function(el) {
            if ((el.nodeType == 1) || (el.nodeType == 3)) {
                var c = treeNodeFromXml(el);
                if (c) {
                    result.appendChild(c);
                }
            }
        });
    }
    return result;
}

示例数据tree.json:
[{
    text : 'json树根',
    url : 'root',
    menuid : 'root',
    expanded : true,
    children : [{
        text : 'json节点一',
        url : '001',
        menuid : '01',
        expanded : true
    }, {
        text : 'json节点二二',
        expanded : true,
        children : [{
            text : 'json节点三',
            url : '003',
            menuid : '03',
            expanded : true
        }, {
            text : 'json节点四',
            url : '004',
            menuid : '04',
            expanded : true
        }]
    }]
}]
示例数据tree.xml:
<xml树根 expanded="true" menuid="10000" >
  <xml节点一 expanded="true" menuid="10005" />
  <xml节点二 expanded="true" menuid="10007"  />
xml树根>


分享到:
评论

相关推荐

    自己编写的json 对象与xml 和Tree之间的转换

    在"jsonTree"压缩包中,可能包含了实现这些功能的代码示例、库或者工具,供学习和参考。为了进一步了解和实践这些转换,你可以解压文件并查看具体内容,包括可能的源码、示例数据和使用说明。 总的来说,JSON和XML...

    xmljson解析客户端

    本文将探讨"xmljson解析客户端"相关的知识点,包括XML和JSON的基本概念、它们之间的转换,以及可能使用的解析库。 首先,XML是一种基于文本的标记语言,它的主要特点是可以定义自定义的标签来表示数据。XML文档由...

    eclipse 集成 JSON2XML Tree Viewer

    本篇文章将详细介绍如何在Eclipse中集成JSON2XML Tree Viewer插件,以及如何利用它将JSON文本转换为XML和树形视图。 首先,我们要了解JSON和XML的基本概念。JSON是一种轻量级的数据交换格式,易于人阅读和编写,...

    XML与JSON文件代码例子

    在Python中,有`xml.etree.ElementTree`库处理XML,`json`模块处理JSON。 总结来说,XML和JSON是数据表示的两种重要方式,它们各有特点,适应不同的应用场景。TestXML文件中的内容可能是展示如何在代码中创建、解析...

    天气预报 xml json

    例如,在Python中,我们可以使用`xml.etree.ElementTree`库解析XML,使用`json`模块解析JSON。这些解析器可以帮助我们提取并处理从服务器返回的数据,将其转化为可操作的对象。 联网部分,开发者可能使用了HTTP请求...

    android xml转jsonxml转json(两种,一种jar包一种工程lib)

    在Android开发中,数据交换和存储经常涉及到XML与JSON这两种格式的转换。XML(Extensible Markup Language)是一种结构化数据格式,常用于Web服务和配置文件;而JSON(JavaScript Object Notation)则是一种轻量级的...

    xml2json.zip

    标题“xml2json.zip”揭示了这是一个包含将XML文件转换为JSON格式的工具或...同时,理解XML和JSON的语法基础,以及Python的XML和JSON处理库(如`xml.etree.ElementTree`和`json`模块),对于充分利用这个工具至关重要。

    XML数据生成Json格式代码

    下面是一个简单的Python示例,展示了如何使用`xml.etree.ElementTree`和`json`库进行XML到JSON的转换: ```python import json import xml.etree.ElementTree as ET def xml_to_dict(element): if len(element) =...

    voc中xml格式转coco数据json格式

    这个过程可能需要编写自定义脚本或者利用已有的开源工具,如Python库如`xml.etree.ElementTree`进行XML解析,以及`json`库进行JSON序列化。`vocToCoco`可能是这样的一个转换工具,它能够自动化处理上述转换工作,...

    property_tree用于json

    Boost库的`property_tree`模块是一个通用的数据存储和检索系统,它可以将数据以树形结构存储,支持XML、INI、JSON等多种格式。这个模块通过统一的接口,使得在不同格式之间转换数据变得非常简单。 在标题提到的...

    (C#)json to xml 解析转换源代码

    直接通过ast生成xml",意味着该代码使用了LL1(Leftmost-Longest First,一种自底向上的解析策略)解析器来处理JSON输入,并生成抽象语法树(AST,Abstract Syntax Tree)。AST是一种编程语言解析后的中间表示,它以...

    Extjs Tree + JSON + Struts2 例子

    ExtJS Tree 需要的数据结构是一个 JSON 数组,每个元素代表树的一个节点。节点可以包含属性如 "cls"(样式类)、"id"(唯一标识)、"leaf"(是否为叶子节点)以及 "children"(子节点数组)。例如: ```javascript ...

    人工智能+数据集预处理+xml文档转json

    这可以通过各种XML解析库实现,如Python中的`xml.etree.ElementTree`。 2. **映射到JSON结构**:解析后的XML数据需要映射到JSON的键值对结构。XML的元素变成JSON的键,元素内容变成对应的值。对于XML的属性,它们...

    用boost::property_tree来解析XML,JSON的示例代码。

    具体信息可以参考 http://blog.csdn.net/harbinzju/article/details/6631738;http://blog.csdn.net/harbinzju/article/details/6632349

    json jquery simple tree 源码

    在原版的jQuery Simple Tree中,可能需要通过特定的方式(如XML或HTML)来构建和填充树节点。然而,随着JSON的普及,开发者开始需要一个能用JSON数据格式来动态加载和展示树结构的功能。 在"json jquery simple ...

    最新省市县行政区域(含编码)XML和JSON数据格式(含测试入库代码)

    1. XML和JSON解析库:如Python的`xml.etree.ElementTree`和`json`模块,Java的`javax.xml.parsers`和`com.fasterxml.jackson.databind`库等。 2. 数据库操作:了解SQL语法,如何创建表并导入数据,以及如何查询和...

    使用xml或者json方式生成dhtmlxtree

    【标题】"使用XML或JSON方式生成dhtmlxtree"主要涉及的是前端数据结构的表示以及与JavaScript库dhtmlxtree的交互。dhtmlxtree是一款用于创建动态HTML树形菜单的JavaScript组件,它允许通过XML或JSON数据格式来构建和...

    表格转csv-xml-json

    Python的xml.etree.ElementTree库或JavaScript的DOM API是实现这一转换的常见选择。 JSON是互联网上最常用的数据交换格式之一,它以键值对的形式表示数据,结构与JavaScript对象相似。JSON数据易于读写,并且可以...

    Json、XML解析

    - Python中,可以使用内置的`xml.etree.ElementTree`模块解析XML。 - Java中,有多种方式,如使用`javax.xml.parsers.DocumentBuilderFactory`创建DOM解析器,或者使用`org.xml.sax`进行SAX解析。 在实际开发中,...

Global site tag (gtag.js) - Google Analytics