java读取xml文件生成树结构_window_JXTree对象,读取外部xml文件数据,生成树的函数,/*************************************** - phpSt...

JXTree对象,读取外部xml文件数据,生成树的函数

/******************************************

*JXTree对象,读取外部xml文件数据,生成树

*@author brull

*@email brull@163.com

*@date 2007-03-27

*******************************************/

/*

*@param xmlURL XML文件的地址

*/

var JXTree = function(xmlURL)

{

var result = new Array();

/*****************************

*首先定义TreeNode抽象对象

*TreeNode对象属性:

*id 唯一编号,必须在xml文件里定义为节点属性

*level 节点层次,从-1开始(即根节点)

*_click 节点click,在xml文件定义为节点属性[可选]

*isLast 是否为本节点所在层次最后一个节点

*parent_isLast 父节点是否为父节点所在层次的最后一个节点

*toHTML 本节点转成HTML代码的方法

*******************************/

var TreeNode = function (node,level)

{

var parent_elements = node.parentNode ? (node.parentNode.parentNode ? node.parentNode.parentNode.childNodes : null) : null;

var elements = node.parentNode ? node.parentNode.childNodes : null;

this.id = XMLDom.getAttribute(node,"id") ? XMLDom.getAttribute(node,"id") : "";

this.level = level;//节点的层次

this.isLast = elements ? ((elements.item(elements.length-2) === node) ? true : false) : false;

this._click = XMLDom.getAttribute(node,'click') ? XMLDom.getAttribute(node,'click') : "";

this.toHTML = null;//function

}

/*****************************

*ElementNode对象,继承自抽象对象TreeNode

*新增属性:

*_nodeName 节点名称

******************************/

var ElementNode = function(node,level)

{

TreeNode.apply(this,arguments);

this._nodeName = XMLDom.getAttribute(node,"name") ? XMLDom.getAttribute(node,"name") : "";

this.toHTML = function(){

var result = "";

if(this.isLast) result += "

else result += "

result += " id='"+this.id+"_join' οnclick=\"JXTree.changeState('"+this.id+"')\">

"+this._nodeName+"
";

return result;

}

}

/*****************************

*TexNode对象,继承自抽象对象TreeNode

*属性和TreeNode一样

*新增属性:

*_nodeValue 节点值

******************************/

var TextNode = function(node,level)

{

TreeNode.apply(this,arguments);

this._nodeValue = node.firstChild.nodeValue;

this.toHTML = function(){

var result = "";

if(this.isLast) result += "

else result += "

result += "

"+this._nodeValue+"
";

return result;

}

}

/**********Node 节点构建结束,开始解释XML文件************/

var DOMRoot=XMLDom.loadXML(xmlURL).documentElement;//同步加载XML文件

var level = -1;//root节点level

var stack = new Array(1);

result.push("

"+XMLDom.getAttribute(DOMRoot,"name")+"
");

//解释xml文件内容成树状态展开的HTML代码,递归调用

this.parseXML = function(node){

stack.push(level);

level++;

var element = new ElementNode(node,level);

var elements = node.childNodes;

if(level != 0){

if(element.isLast)

result.push("

");

else

result.push("

");

}

for(var i=0;i

if(elements.item(i).nodeName == "item"){//节点为树叶

var textNode = new TextNode(elements.item(i),level);

result.push(textNode.toHTML());

textNode = null;//及时释放对象

}

else if(elements.item(i).nodeType ==1){//节点为树枝

var elementNode = new ElementNode(elements.item(i),level);

result.push(elementNode.toHTML());

elementNode = null;//及时释放对象

this.parseXML(elements.item(i));

}

}

if(level != 0)result.push("

");

level = stack.pop();

}

//得到解释结果并返回

this.getTree = function(){

this.parseXML(DOMRoot);

DOMRoot = null;//释放DOM对象

return result.join("");

}

/*************静态属性***************/

JXTree.curText = null;//当前文本的id

/************静态方法***************/

JXTree.changeState = function (id){//展开或者收缩节点内容

var _body = document.getElementById(id + "_body");

var _join = document.getElementById(id+"_join");

var folder = document.getElementById(id+"_folder");

(_body.style.display == "none") ? (

_body.style.display = "block",

_join.className = _join.className.replace("plus","minus"),

folder.className = "folder_open"

) : (

_body.style.display = "none",

_join.className = _join.className.replace("minus","plus"),

folder.className = "folder_close"

)

};//changeState

JXTree.setFocus = function(id){

if(JXTree.curText)

with(document.getElementById(JXTree.curText).style){

backgroundColor = "";

color = "#000";

}

with( document.getElementById(id).style){

backgroundColor = "#003366";

color = "#FFF";

}

JXTree.curText = id;

}

}相关阅读:

关于tbody的用法

关于文本留言本的分页代码

使用PHP维护文件系统

Linux下如何安装phpmyadmin

javascript控制frame,iframe的src属性代码

访问和更改关系数据,使用MSSQL外联接

XP SP2升级到SP3因“磁盘空间不足”导致安装失败

PHP/MySQL三日通(3)

SQL 研究- Common Table Expression

使用VBScript 中的类组织开发

ASP.NET 数据访问类

深入了解php4(2)--重访过去

基于jquery的button默认enter事件(回车事件)。

轻松安装 chinput 3 输入法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值