解析xml文档,生成树型目录改怎么作啊? jdom可以,如果不清楚XML的结构就按递归做,如果清楚结构可以一层一层取 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /* * 创建日期 2005-5-6 */package parsexml;/** * @author Larry Zhao *///DOM树的显示生成代码import org.w3c.dom.*; // Core DOM classesimport org.w3c.dom.traversal.*; // TreeWalker and related DOM classesimport org.apache.xerces.parsers.*; // Apache Xerces parser classesimport org.xml.sax.*; // Xerces DOM parser uses some SAX classesimport javax.swing.*; // Swing classes import javax.swing.tree.*; // TreeModel and related classesimport javax.swing.event.*; // Tree-related event classesimport java.io.*; // For reading the input XML filepublic class ParseXML4 implements TreeModel { //实现TreeModel的接口 TreeWalker walker; // 创建TreeWalker的变量 /** 创建TreeWalker模型 */ public ParseXML4(TreeWalker walker) { this.walker = walker; } /** * 创建树并返回所有内容 **/ public ParseXML4(Document document) { DocumentTraversal dt = (DocumentTraversal) document; walker = dt .createTreeWalker(document, NodeFilter.SHOW_ALL, null, false); } /** * 创建树并返回所有元素 **/ public ParseXML4(Element element) { DocumentTraversal dt = (DocumentTraversal) element.getOwnerDocument(); walker = dt.createTreeWalker(element, NodeFilter.SHOW_ALL, null, false); } // 获取树的根节点 public Object getRoot() { return walker.getRoot(); } // 判断是否是叶子节点 public boolean isLeaf(Object node) { walker.setCurrentNode((Node) node); // 设置当前节点 Node child = walker.firstChild(); // 获取第一个子节点 return (child == null); // 获取不到,子节点返回空 } //获取孩子节点的数目 public int getChildCount(Object node) { walker.setCurrentNode((Node) node); // 设置当前节点 // TreeWalker没有孩子节点的计数,自己做循环实现 int numkids = 0; Node child = walker.firstChild(); // 从第一个子节点开始 while (child != null) { // 循环计算直到子节点为空 numkids++; // 计数累加 child = walker.nextSibling(); // 获取下一个子节点 } return numkids; //返回子节点的数目 } //返回父节点中的子节点 public Object getChild(Object parent, int index) { walker.setCurrentNode((Node) parent); // 设置当前节点 // TreeWalker提供顺序地访问子节点 Node child = walker.firstChild(); while (index-- > 0) child = walker.nextSibling();//索引(层数)递减大于0说明还有子节点,继续拿 return child; } //返回子节点在父节点的索引 public int getIndexOfChild(Object parent, Object child) { walker.setCurrentNode((Node) parent); // 设置当前节点 int index = 0; Node c = walker.firstChild(); // 从第一个子节点开始 while ((c != child) && (c != null)) { // 如果第一个子节点不为空而且下面有子节点,开始循环 index++; c = walker.nextSibling(); // 获取下一个子节点 } return index; // 返回索引(即层数) } // 只有在需要编辑树时才修改这个方法,不需要修改接口原有的方法 public void valueForPathChanged(TreePath path, Object newvalue) { } // 树不可编辑,不需要修改接口原有的方法 public void addTreeModelListener(TreeModelListener l) { } public void removeTreeModelListener(TreeModelListener l) { } /** * Xerces DOM parser, and the creation of a DOM Level 2 TreeWalker object. **/ public static void main(String[] args) throws IOException, SAXException { // 使用Xerces parser创建DOM树的实例. // 没有使用JAXP API here DOMParser parser = new org.apache.xerces.parsers.DOMParser(); //获取XML文件 FileReader file = new FileReader("test4.xml"); Reader in = new BufferedReader(file); InputSource input = new org.xml.sax.InputSource(in); //解析文件 parser.parse(input); //标准的DOM创建document对象 Document document = parser.getDocument(); // 如果使用DOM Level 2的引用,document对象应该创建DocumentTraversal的对象 DocumentTraversal traversal = (DocumentTraversal) document; // 创建节点筛选 NodeFilter filter = new NodeFilter() { public short acceptNode(Node n) { if (n.getNodeType() == Node.TEXT_NODE) { // Use trim() to strip off leading and trailing space. // If nothing is left, then reject the node if (((Text) n).getData().trim().length() == 0) return NodeFilter.FILTER_REJECT; } return NodeFilter.FILTER_ACCEPT; } }; // 显示所有节点但是不包含注释 int whatToShow = NodeFilter.SHOW_ALL & ~NodeFilter.SHOW_COMMENT; //创建基于上述筛选方法的树结构 TreeWalker walker = traversal.createTreeWalker(document, whatToShow, filter, false); // 初始化数模型并显示 JTree tree = new JTree(new ParseXML4(walker)); // 显示窗口 JFrame frame = new JFrame("XML文件树状生成"); frame.getContentPane().add(new JScrollPane(tree)); frame.setSize(500, 250); frame.setVisible(true); }} java网站的中英文切换该怎样实现呀。。 急!struts2 上传 .mdb 数据库 出错 【急】struts2为何不能如此封装数据?高手进!!! struts1和struts2 怎样将网页中的表单生成报表(excel) 要建一个tomcat项目,总是划红叉,大概是tomcat那还不对,咋办? 不理解!!!能给我说说吗? 求助?一个格子游戏的麻烦! 编写小型网络程序发布本地html文件小问题 shiro和springmvc怎么控制ajax和redirect:/**.jsp xml如何获取encoding的值 eclipse +MyEclipse jsp 文件无故报错.
* 创建日期 2005-5-6
*/
package parsexml;/**
* @author Larry Zhao
*/
//DOM树的显示生成代码
import org.w3c.dom.*; // Core DOM classes
import org.w3c.dom.traversal.*; // TreeWalker and related DOM classes
import org.apache.xerces.parsers.*; // Apache Xerces parser classes
import org.xml.sax.*; // Xerces DOM parser uses some SAX classes
import javax.swing.*; // Swing classes
import javax.swing.tree.*; // TreeModel and related classes
import javax.swing.event.*; // Tree-related event classes
import java.io.*; // For reading the input XML filepublic class ParseXML4 implements TreeModel {
//实现TreeModel的接口
TreeWalker walker; // 创建TreeWalker的变量 /** 创建TreeWalker模型 */
public ParseXML4(TreeWalker walker) {
this.walker = walker;
} /**
* 创建树并返回所有内容
**/
public ParseXML4(Document document) {
DocumentTraversal dt = (DocumentTraversal) document;
walker = dt
.createTreeWalker(document, NodeFilter.SHOW_ALL, null, false);
} /**
* 创建树并返回所有元素
**/
public ParseXML4(Element element) {
DocumentTraversal dt = (DocumentTraversal) element.getOwnerDocument();
walker = dt.createTreeWalker(element, NodeFilter.SHOW_ALL, null, false);
} // 获取树的根节点
public Object getRoot() {
return walker.getRoot();
} // 判断是否是叶子节点
public boolean isLeaf(Object node) {
walker.setCurrentNode((Node) node); // 设置当前节点
Node child = walker.firstChild(); // 获取第一个子节点
return (child == null); // 获取不到,子节点返回空
} //获取孩子节点的数目
public int getChildCount(Object node) {
walker.setCurrentNode((Node) node); // 设置当前节点
// TreeWalker没有孩子节点的计数,自己做循环实现
int numkids = 0;
Node child = walker.firstChild(); // 从第一个子节点开始
while (child != null) { // 循环计算直到子节点为空
numkids++; // 计数累加
child = walker.nextSibling(); // 获取下一个子节点
}
return numkids; //返回子节点的数目
} //返回父节点中的子节点
public Object getChild(Object parent, int index) {
walker.setCurrentNode((Node) parent); // 设置当前节点
// TreeWalker提供顺序地访问子节点
Node child = walker.firstChild();
while (index-- > 0)
child = walker.nextSibling();//索引(层数)递减大于0说明还有子节点,继续拿
return child;
} //返回子节点在父节点的索引
public int getIndexOfChild(Object parent, Object child) {
walker.setCurrentNode((Node) parent); // 设置当前节点
int index = 0;
Node c = walker.firstChild(); // 从第一个子节点开始
while ((c != child) && (c != null)) { // 如果第一个子节点不为空而且下面有子节点,开始循环
index++;
c = walker.nextSibling(); // 获取下一个子节点
}
return index; // 返回索引(即层数)
} // 只有在需要编辑树时才修改这个方法,不需要修改接口原有的方法
public void valueForPathChanged(TreePath path, Object newvalue) {
} // 树不可编辑,不需要修改接口原有的方法
public void addTreeModelListener(TreeModelListener l) {
} public void removeTreeModelListener(TreeModelListener l) {
} /**
* Xerces DOM parser, and the creation of a DOM Level 2 TreeWalker object.
**/
public static void main(String[] args) throws IOException, SAXException {
// 使用Xerces parser创建DOM树的实例.
// 没有使用JAXP API here
DOMParser parser = new org.apache.xerces.parsers.DOMParser(); //获取XML文件
FileReader file = new FileReader("test4.xml");
Reader in = new BufferedReader(file);
InputSource input = new org.xml.sax.InputSource(in); //解析文件
parser.parse(input); //标准的DOM创建document对象
Document document = parser.getDocument(); // 如果使用DOM Level 2的引用,document对象应该创建DocumentTraversal的对象
DocumentTraversal traversal = (DocumentTraversal) document; // 创建节点筛选
NodeFilter filter = new NodeFilter() {
public short acceptNode(Node n) {
if (n.getNodeType() == Node.TEXT_NODE) {
// Use trim() to strip off leading and trailing space.
// If nothing is left, then reject the node
if (((Text) n).getData().trim().length() == 0)
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}; // 显示所有节点但是不包含注释
int whatToShow = NodeFilter.SHOW_ALL & ~NodeFilter.SHOW_COMMENT; //创建基于上述筛选方法的树结构
TreeWalker walker = traversal.createTreeWalker(document, whatToShow,
filter, false); // 初始化数模型并显示
JTree tree = new JTree(new ParseXML4(walker)); // 显示窗口
JFrame frame = new JFrame("XML文件树状生成");
frame.getContentPane().add(new JScrollPane(tree));
frame.setSize(500, 250);
frame.setVisible(true);
}
}