js动态树解析xml

cqhweb 2009-03-04 05:19:36


<root>
<node id="n1" ><name>OU=ABC</name></node>
<node id="n2" parentid="n1"><name>OU=abc</name></node>
<node id="n3" parentid="n2"><name>CN=zhangsan</name></node>
<node id="n4" parentid="n3"><name>OU=aa</name></node>
<node id="n5" parentid="n3"><name>OU=bb</name></node>
<node id="n6" parentid="n3"><name>OU=cc</name></node>
<node id="n7" parentid="n4"><name>CN=a1</name></node>
<node id="n8" parentid="n4"><name>CN=a2</name></node>
<node id="n9" parentid="n5"><name>CN=b1</name></node>
<node id="n10" parentid="n6"><name>CN=c1</name></node>
</root>

id:当前结点,parentid:父结点

举例:现有以上book.xml文件....要用js动态进行解析,前端页面是用jsp作为展现。
如果用Dom一次性加载book.xml(结点层级非常复杂时)效率较低,运行速度慢。
有没有能够实现每点击一次提取下一级结点xml,耗时少。


有没有很好的参考Demo或者源码,请留下QQ,或msn 或email给本人传一份,将不胜感。
...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyydingding 2009-03-10
  • 打赏
  • 举报
回复
改变XML结构也是个不错的选择,应该按照你程序的逻辑编写 进行修改XML结构,这样的话 应该不麻烦吧!
knightwayne 2009-03-06
  • 打赏
  • 举报
回复
<rootnode>
<parentnode id="n1">
<name>OU=ABC</name>
<parentnode id="n2">
<name>OU=abc</name>
<parentnode id="n3">
<name>CN=zhangsan</name>
<parentnode id="n4">
<name>OU=aa</name>
<leafnode id="n7">
<name>CN=a1</name>
</leafnode>
<leafnode id="n8">
<name>CN=a2</name>
</leafnode>
</parentnode>
<parentnode id="n5">
<name>OU=bb</name>
<leafnode id="n9">
<name>CN=b1</name>
</leafnode>
</parentnode>
<parentnode id="n6">
<name>OU=cc</name>
<leafnode id="n10">
<name>CN=c1</name>
</leafnode>
</parentnode>
</parentnode>
</parentnode>
</parentnode>
</rootnode>

改变原xml的结构(如果无法改变,那么自己转化一下吧),改成如上结构,自然就是方便解析了
dyydingding 2009-03-06
  • 打赏
  • 举报
回复
JSON也是一个不错的选择,XML读取量太大。只是建议!!!
cqhweb 2009-03-06
  • 打赏
  • 举报
回复
这些数据不是存放在关系型的数据库里面,而是lotus 数据库(目录二叉树形式结构)。



阿云ivan 2009-03-05
  • 打赏
  • 举报
回复
既然性能上出现问题就别用xml了,改用数据库吧
然后用ajax提取你想要的数据
手写 2009-03-05
  • 打赏
  • 举报
回复
LZ还没习惯XML的树型编程.也有可能这XML是服务器端生成的,服务器端的条件容易输出dom吧
王集鹄 2009-03-05
  • 打赏
  • 举报
回复
本身xml就是一个树形结构,干嘛还定义这样原始的id+parentid结构。
jue_token 2009-03-05
  • 打赏
  • 举报
回复
可以!可以用jquery的ajax的get,不断地get你点击的那个节点的下面的一个动态生成的xml就可以了,我这次的项目用到了好多这样的。
手写 2009-03-04
  • 打赏
  • 举报
回复
主要原因可能在dom生成页面的时候慢,
你可以测试一下 加载10000个node 和10000个documentElement哪个更费时间
var ss=new Date();
var thisNod=null;
function Node(id){
this.id=id
this.ch={};
}
for(var i=0;i<10000;i++){
var cc=new Node(i);
if(thisNod!=null){
thisNod.ch["key"+i]=cc;
}else{
thisNod=cc;
}
}
var en=new Date();
document.write(en-ss);
for(var i=0;i<10000;i++){
var ele=document.createElement("div");
ele.innerHTML=i;
ele.style.display="none";
document.body.appendChild(ele);
}
ss=new Date();
document.write("<br>"+(ss-en));


在这里,你可以利用惰性加载技术.
将数据模块和显示模块分开加载.
先将xml格式化成树型结构.这是数据模块所要做的
然后只将树型结构的第一层装载成dom可能是div或其他
最后当事件触发(比如点击页面结点元素)的时候再进行此结点所对应子树的页面加载.
街头小贩 2009-03-04
  • 打赏
  • 举报
回复
哪不也进行了一次DOM装载么?遍历很深的可以用sax呀
街头小贩 2009-03-04
  • 打赏
  • 举报
回复
哪你是不是要先找出父类id=parentid的节点名称呀!

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧