用XML解析目录结构
请教各位,不知道用XML来解析目录结构,怎么样来处理
最好可以给段提示性的代码,谢谢
问题点数:50、回复次数:12Top
1 楼yyzh(答题容易分难得)回复于 2005-07-07 11:49:39 得分 15
是想把XML文件按树状结构显示在网页上么?
<script language="javascript">
var xnode = new Array();
var x = 0;
function SelectNodes(ev, tn)
{
var childs = ev.childNodes;
if (childs==0) return 0;
for (var i=0;i<childs.length;i++)
{
if (childs[i].tagName==tn) return 1;
}
return 0;
}
function SelectSingleNode(ev, tn)
{
var childs = ev.childNodes;
if (childs==0) return null;
for (var i=0;i<childs.length;i++)
{
if (childs[i].tagName==tn) return childs[i];
}
return null;
}
function OpenElement(e_name, e_id)
{
var ev;
ev = document.getElementsByTagName(e_name);
for (var i=0;i<ev.length;i++)
{
if (String(ev[i].id).toLowerCase()==String(e_id).toLowerCase())
return ev[i];
}
var nev = document.createElement(e_name);
nev.id = e_id;
document.body.insertAdjacentElement("beforeEnd", nev);
return nev;
}
function OpenMenu(nodes)
{
var ele = event.srcElement;
var parentMenu = new Object();
if (ele.tagName=="xml")
{
parentMenu = OpenElement("div", "xmenu");
}
else if (ele.tagName=="IMG" || ele.tagName=="A")
{
parentMenu = ele.parentNode;
}
else if (ele.tagName=="DIV")
{
parentMenu = ele;
}
else
{
return;
}
if (SelectNodes(parentMenu, "DIV"))
{
//alert("123");
var childs = parentMenu.childNodes;
var display = "";
for (var i=0;i<childs.length;i++)
{
if (childs[i].tagName=="DIV")
{
display = childs[i].style.display;
childs[i].style.display = (display=="none")?"":"none";
}
}
var img = SelectSingleNode(parentMenu, "IMG");
if (img==null) return;
img.src = (display=="none")?"menu1.gif":"menu0.gif";
}
else
{
var childs = nodes.childNodes;
if (childs.length==0) return;
var left = parseInt(parentMenu.style.left);
if (isNaN(left)) left = 0;
for (var i=0;i<childs.length;i++)
{
xnode[x] = childs[i];
var menu = OpenElement("div", "menu" + x);
parentMenu.insertAdjacentElement("beforeEnd", menu);
menu.style.left = left + 10;
menu.style.position = "relative";
menu.style.display = "";
if (childs[i].hasChildNodes())
{
menu.innerHTML = '<img src="menu0.gif" onclick="OpenMenu(xnode[' + x + '])" style="cursor:hand" /> <a href="javascript:" onclick="OpenMenu(xnode[' + x + '])">' + childs[i].getAttribute("name") + '</a>';
}
else
{
menu.innerHTML = '<img src="menu1.gif" /> <a href="javascript:">' + childs[i].getAttribute("name") + '</a>';
}
x++;
}
var img = SelectSingleNode(parentMenu, "IMG");
if (img==null) return;
img.src = "menu1.gif";
}
}
</script>
<script language="javascript" for="menuxml" event="onreadystatechange">
var xmenu = OpenElement("div", "xmenu");
var state = this.readyState;
switch (state)
{
case "complete":
xmenu.innerHTML = "";
if (this.parseError.errorCode)
{
alert("HOHO:" + this.parseError.reason);
}
else
{
var root = this.documentElement;
OpenMenu(root);
}
break;
default:
xmenu.innerHTML = state;
break;
}
</script>
</head>
<body>
<xml id="menuxml" src="xmenu.xml"></xml>
<div id="hint"></div>
</body>
</html>
-----------------------------------------------------------------------------
<?xml version="1.0"?>
<menu>
<menu name="User Manager 0">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
<menu name="User Manager 1">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
<menu name="User Manager 2">
<menu name="User Liste" />
<menu name="User Liste" />
</menu>
</menu>
</menu>
<menu name="User Manager">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
</menu>
<menu name="User Manager">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
</menu>
<menu name="User Manager">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
</menu>
<menu name="User Manager">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
</menu>
<menu name="User Manager">
<menu name="Profile Manager" />
<menu name="Password Manager" />
<menu name="User Liste" />
</menu>
</menu>Top
2 楼nitc(怪侠一枝梅)回复于 2005-07-07 12:02:52 得分 0
不是亚,,,是用java把他生成XMLTop
3 楼humanity(城市边缘的狼)回复于 2005-07-07 13:22:50 得分 1
那不是更简单,
JDOM 是比较简单的 XML API.Top
4 楼nitc(怪侠一枝梅)回复于 2005-07-07 14:07:13 得分 0
可是要取得目录下所有的文件元素阿,,,,Top
5 楼nitc(怪侠一枝梅)回复于 2005-07-07 14:48:10 得分 0
大家帮帮忙啊
就是某个目录结构,,把他生成XML文件
比如目录A下有文件1,2,3,文件夹B,B里有文件3,4,5
生成XML
<dir name="A">
<file name="1"></file>
<file name="2"></file>
<file name="3"></file>
<dir name="B">
<file name="3"></file>
<file name="4"></file>
<file name="5"></file>
</dir>
</dir>Top
6 楼nitc(怪侠一枝梅)回复于 2005-07-07 15:40:21 得分 0
大家帮帮忙啊
就是某个目录结构,,把他生成XML文件
比如目录A下有文件1,2,3,文件夹B,B里有文件3,4,5
生成XML
<dir name="A">
<file name="1"></file>
<file name="2"></file>
<file name="3"></file>
<dir name="B">
<file name="3"></file>
<file name="4"></file>
<file name="5"></file>
</dir>
</dir>
Top
7 楼yyzh(答题容易分难得)回复于 2005-07-07 15:53:23 得分 0
import org.jdom.Document;
import org.jdom.Element;
Element root = new Element("root");
Element dir= new Element("dir");
dir.setAttribute("name","A");
Element file= new Element("file");
file.setAttribute("name","1");
dir.addContent(file);
root.addContent(dir);
Document doc = new Document(root);Top
8 楼rower203(华仔)回复于 2005-07-07 15:56:09 得分 1
不难,自己不做!?
多加些分给你做一个?Top
9 楼nitc(怪侠一枝梅)回复于 2005-07-07 16:16:27 得分 0
呵呵,,主要从把目录结构用读出来的那段,这段我也知道Top
10 楼nitc(怪侠一枝梅)回复于 2005-07-07 16:18:20 得分 0
从目录结构用java操作读到Collection API ,然后用这个就容易了,,关键是第一步Top
11 楼rower203(华仔)回复于 2005-07-07 16:24:02 得分 33
public static void createXMLForFolder(PrintStream xmlFile, String s){
File io = new File(s);
if (io.isDirectory()) {
xmlFile.println("<dir name=\"" + s + "\">");
File[] file = io.listFiles();
for (int i = 0; i < file.length; i++) {
createXMLForFolder(xmlFile, file[i].getPath());
}
xmlFile.println("</dir>");
}
else {
xmlFile.println("\t<file name=\"" + io.getPath() + "\"></file>");
}
}
public static void main( String[] args ) throws FileNotFoundException
{
PrintStream xmlFile = new PrintStream(new FileOutputStream("Folder.xml", false));
createXMLForFolder(xmlFile, "aa");
xmlFile.close();
}
很简单。Top
12 楼nitc(怪侠一枝梅)回复于 2005-07-07 16:28:34 得分 0
我应该早想到了,,,,哎,,还是思考不够,,谢谢你大虾,,,交个朋友Top




