﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Chasing.......</title><link>http://www.blogjava.net/EriK-Bi/</link><description>For nothing</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 05:18:55 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 05:18:55 GMT</pubDate><ttl>60</ttl><item><title>关于js中处理xml文件</title><link>http://www.blogjava.net/EriK-Bi/archive/2007/08/20/135591.html</link><dc:creator>IamEriK</dc:creator><author>IamEriK</author><pubDate>Mon, 20 Aug 2007 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/EriK-Bi/archive/2007/08/20/135591.html</guid><wfw:comment>http://www.blogjava.net/EriK-Bi/comments/135591.html</wfw:comment><comments>http://www.blogjava.net/EriK-Bi/archive/2007/08/20/135591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/EriK-Bi/comments/commentRss/135591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/EriK-Bi/services/trackbacks/135591.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">想要动态的根据xml文件来创建一棵Tree,采用dojo的Tree这个widget来作为载体实现，本以为很简单的工作却没有想到的麻烦。 <br>1.使用js来load xml文件<br><br>function loadXML(xmlFile)<br>{<br>&nbsp;&nbsp;&nbsp; var xmlDoc;<br>&nbsp;&nbsp;&nbsp; if(window.ActiveXObject)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc&nbsp;&nbsp;&nbsp; = new ActiveXObject('Microsoft.XMLDOM');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.async&nbsp;&nbsp;&nbsp; = false;&nbsp;&nbsp;&nbsp; //这里千万需要注意，非同步的选项，默认为true，后面Note 1会有解释<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.load(xmlFile);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else if (document.implementation&amp;&amp;document.implementation.createDocument)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc&nbsp; = document.implementation.createDocument('', '', null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.async=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDoc.load(xmlFile);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return xmlDoc;<br>}</p>
<p style="FONT-SIZE: 12pt">function checkXMLDocObj(xmlFile)<br>{<br>&nbsp;&nbsp;&nbsp; var xmlDoc&nbsp;&nbsp;&nbsp; = loadXML(xmlFile);<br>&nbsp;&nbsp;&nbsp; if(xmlDoc==null)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Explore do not support xml file load');<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return xmlDoc;<br>&nbsp;&nbsp;&nbsp; <br>}<br>&nbsp;<br>function parseXML(xml) {<br>&nbsp;var xmlDoc&nbsp;&nbsp;&nbsp; = checkXMLDocObj("/Tree/data.xml"); //&nbsp;这里是文件，默认根节点叫做data<br>&nbsp;var data = xmlDoc.getElementsByTagName("data");<br>createTreeFromXML(data.item(0));&nbsp;&nbsp; //这里是一个很tricky的方式取到xml文件的根节点<br>var s = dojo.widget.byId("dataTree").selector;&nbsp;&nbsp;&nbsp; //发现动态的给dojo的tree node加selector非常困难，但突然发现dojo tree默认给每一个节点都有selector，所以直接取来用<br>dojo.event.connect(s, 'select', 'treeNodeSelected');&nbsp;&nbsp;&nbsp; //就是一个字了，爽<br>}<br><br>function createTreeFromXML(root) {<br>&nbsp;&nbsp;var tree = dojo.widget.byId("dataTree");<br>&nbsp;&nbsp;if(tree == null)<br>&nbsp;&nbsp;&nbsp;alert("null");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;tree.destroy();<br>&nbsp;&nbsp;tree = dojo.widget.createWidget("Tree", {id: "dataTree", toggle: "wipe", expandLevel: 3});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建tree<br>&nbsp;&nbsp;dojo.byId("tree").appendChild(tree.domNode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /放置tree<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;var rootNode = dojo.widget.createWidget("TreeNode", {title: root.localName});<br>&nbsp;&nbsp;tree.addChild(rootNode);<br>&nbsp;&nbsp;appendChild(root,rootNode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开始循环递归的创建tree的子节点<br>&nbsp;}<br>&nbsp;<br>&nbsp;function appendChild(father,fatherTreeNode) {<br>&nbsp;&nbsp;var sub;<br>&nbsp;&nbsp;var subTreeNode;<br>&nbsp;&nbsp;if(window.ActiveXObject) {<br>&nbsp;&nbsp;&nbsp;for(var i = 1; i &lt; father.childNodes.length; i=i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里有一个很恶心的事情，就是ie&nbsp;和firefox了，一个父节点，在ie中get the child&nbsp;nodes,works fine<br>&nbsp;&nbsp;&nbsp;&nbsp;sub = father.childNodes[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;var title = sub.localName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;subTreeNode = dojo.widget.createWidget("TreeNode",{title: title});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;fatherTreeNode.addChild(subTreeNode);<br>&nbsp;&nbsp;&nbsp;&nbsp;appendChild(sub,subTreeNode,objectID); <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else {<br>&nbsp;&nbsp;&nbsp;for(var i = 1,j=1; i &lt; father.childNodes.length; i=i+2,j++) {&nbsp;&nbsp;&nbsp; //&nbsp;在firefox中获取，要间隔为2，中间总是多出一个滥竽充数的家伙<br>&nbsp;&nbsp;&nbsp;&nbsp;sub = father.childNodes[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;var title = sub.localName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用localName属性<br>&nbsp;&nbsp;&nbsp;&nbsp;subTreeNode = dojo.widget.createWidget("TreeNode",{title: title});&nbsp;&nbsp;&nbsp; //生成新的子节点<br>&nbsp;&nbsp;&nbsp;&nbsp;fatherTreeNode.addChild(subTreeNode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;appendChild(sub,subTreeNode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //递归<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return;<br>&nbsp;}<br><br>Note: <br>1. 在load xml文件的时候非同步参数一定要设置为false,否则很可能会发生在xml文件还没有load完之后就调用处理从而发生找不到节点的error<br>2. ie和firefox的dom child node 问题也值得注意，以后会再研究一下问什么会发生这种问题。</p>
<img src ="http://www.blogjava.net/EriK-Bi/aggbug/135591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/EriK-Bi/" target="_blank">IamEriK</a> 2007-08-20 13:45 <a href="http://www.blogjava.net/EriK-Bi/archive/2007/08/20/135591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>