D:\>java TreeTest
0 Questions
1 Question
2 Answer
3 Item
4 Item
3 Content
4 Comment你要的是什么样的结果????????
0 Questions
1 Question
2 Answer
3 Item
4 Item
3 Content
4 Comment你要的是什么样的结果????????
解决方案 »
- Wabacus!超火的Java开发框架。。。
- 怎么安装Eclipse日文包插件
- 。<%@ page import="com.wgh.dao.SubtypeDaoImpl"%><jsp:useBean id="SubType" scope="
- 各位大大们,救救我,给我点建议我想培训,不知道上哪去
- gwt 从后台取出的数据如何放入grid中
- 关于java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
- 关于转换Double类型的问题
- 图形报表送分(2)
- jb8+weblogic疑惑,每次加了server,选择的时候总是没有?(灰色不可选)
- 请问谁有weblogic的中文版管理员手册,或者相关中文文档,谢谢
- 如果想在JDK1.4版本上实现泛型该如何做?
- 新人求问Hibernate
---------------------------------------
打印结果为:0 根元素 Questions
1 第一层子元素 Queston
2 第二层子元素 Answer
3 第三层子元素 Item
3 第三层子元素 Item
3 第三层子元素 Content
3 第三层子元素 Comment
1 第一层子元素 Question
2 第二层子元素 Answer
3 第三层子元素 Item
3 第三层子元素 Item
3 第三层子元素 Content
3 第三层子元素 Comment----------------------------------------------
明白吗?
{
System.out.println(gradeNumber+" "+element.getName());
if (element.hasChildren())
{
List list=element.getChildren();
for (int i=0;i<list.size();i++)
{
Element tmp=(Element)list.get(i);
//recurse(tmp,++gradeNumber);
gradeNumber++;
recurse(tmp,gradeNumber);
gradeNumber--;
}
}
}还要你的xml格式需要更改:Comment必须和Item 一样,包含在Answer底下!
2 第二层子元素 Answer
3 第三层子元素 Item
3 第三层子元素 Item
3 第三层子元素 Content
3 第三层子元素 Comment
public void recurse(Element element,int gradeNumber) throws Exception
{
System.out.println(gradeNumber+" "+element.getName());
if (element.hasChildren())
{
List list=element.getChildren();
for (int i=0;i<list.size();i++)
{
Element tmp=(Element)list.get(i);
recurse(tmp,gradeNumber+1);
}
}
}
刚才改进了一下程序,又发现一个问题,用变量treeDepth无法正确得到XML树的深度,很奇怪
*/
import org.apache.xerces.parsers.SAXParser;import java.util.*;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class TreeTest
{
/**
*XML tree depth
*/
private int treeDepth=0;
/**
*Element's grade(层数)
*/
private int gradeNumber=0;
/**
*Save all elements
*/
private Vector vector=new Vector(); public static void main(String[] args)
{
try
{
TreeTest t=new TreeTest();
t.go("D:\\DK\\WorkRoom\\book.xml");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void go(String path) throws Exception
{
/**
*XML parser
*/
SAXBuilder saxBuilder=new SAXBuilder("org.apache.xerces.parsers.SAXParser");
/**
*JDOM document
*/
Document jdomDoc=saxBuilder.build(path);
/**
*Root element
*/
Element rootElement=jdomDoc.getRootElement();
recurse(rootElement,gradeNumber);
viewVector();
System.out.println("XML tree's depth is "+treeDepth);
}
/**
*Recursion,get all elements
*/
public void recurse(Element element,int gradeNumber) throws Exception
{
System.out.println(gradeNumber+" "+element.getName());
// Save this element
vector.add(new MyElement(gradeNumber,element));
if (element.hasChildren())
{
if (treeDepth<gradeNumber)
{
treeDepth=gradeNumber;
System.out.println("XML tree's depth add 1.");
}
List list=element.getChildren();
for (int i=0;i<list.size();i++)
{
Element tmp=(Element)list.get(i);
recurse(tmp,gradeNumber+1);
}
}
}
/**
*Show the vector
*/
public void viewVector() throws Exception
{
System.out.println("This XML document has "+vector.size()+" elements."); for (int i=0;i<vector.size();i++)
{
MyElement tmp=(MyElement)vector.elementAt(i);
if (tmp.getKey()==3)
{
Element tmp2=(Element)tmp.getObject();
System.out.println(tmp2.getName()+" "+tmp2.getText());
}
}
}
}
class TreeElement
{
private int key;
private Object object;
TreeElement(int i,Object o)
{
setKey(i);
setObject(o);
}
void setKey(int gradeNumber)
{
key=gradeNumber;
}
int getKey()
{
return key;
}
void setObject(Object obj)
{
object=obj;
}
Object getObject()
{
return object;
}
}
{
System.out.println(gradeNumber+" "+element.getName());
// Save this element
vector.add(new MyElement(gradeNumber,element));
if (treeDepth<gradeNumber)
{
treeDepth=gradeNumber;
System.out.println("XML tree's depth add 1.");
}
if (element.hasChildren())
{
List list=element.getChildren();
for (int i=0;i<list.size();i++)
{
Element tmp=(Element)list.get(i);
recurse(tmp,gradeNumber+1);
}
}
}
/**
/*-- Copyright (C) 2000 Brett McLaughlin & Jason Hunter.
All rights reserved. Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met: 1. Redistributions of source code must retain the above copyright
notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the disclaimer that follows
these conditions in the documentation and/or other materials
provided with the distribution. 3. The name "JDOM" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact [email protected]. 4. Products derived from this software may not be called "JDOM", nor
may "JDOM" appear in their name, without prior written permission
from the JDOM Project Management ([email protected]). In addition, we request (but do not require) that you include in the
end-user documentation provided with the redistribution and/or in the
software itself an acknowledgement equivalent to the following:
"This product includes software developed by the
JDOM Project (http://www.jdom.org/)."
Alternatively, the acknowledgment may be graphical using the logos
available at http://www.jdom.org/images/logos. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. This software consists of voluntary contributions made by many
individuals on behalf of the JDOM Project and was originally
created by Brett McLaughlin <[email protected]> and
Jason Hunter <[email protected]>. For more information on the
JDOM Project, please see <http://www.jdom.org/>. */package org.jdom.contrib.output;/**
* A JTree outputter.
* <p>
* This outputter builds a JTree representation of the JDOM document for
* easy visual navigation. This is a full rewrite of the JTreeOutputter
* originally written by James Davies.
* </p>
*
* @author Matthew MacKenzie [[email protected]]
*/
import java.util.Iterator;
import java.util.List;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.jdom.Attribute;
import org.jdom.Element;public class JTreeOutputter { public JTreeOutputter() {
} public JTreeOutputter(boolean toBeCompatible) {
// just here to mimic the legacy JTreeOutputter
} /**
* Output a Document.
* @param Document The document to transform to TreeNode.
* @param DefaultMutableTreeNode The root tree node.
* @return void
*/
public void output(Document doc, DefaultMutableTreeNode root) {
processElement(doc.getRootElement(),root);
} /**
* Output an Element.
* @param Element The element to transform to TreeNode.
* @param DefaultMutableTreeNode The root tree node.
* @return void
*/
public void output(Element el, DefaultMutableTreeNode root) {
processElement(el, root);
} protected void processElement(Element el, DefaultMutableTreeNode dmtn) {
DefaultMutableTreeNode dmtnLocal =
new DefaultMutableTreeNode(el.getName());
String elText = el.getTextTrim();
if (elText != null && !elText.equals("")) {
dmtnLocal.add(new DefaultMutableTreeNode(elText));
}
processAttributes(el, dmtnLocal); Iterator iter = el.getChildren().iterator(); while (iter.hasNext()) {
Element nextEl = (Element)iter.next();
processElement(nextEl, dmtnLocal);
}
dmtn.add(dmtnLocal);
} protected void processAttributes(Element el, DefaultMutableTreeNode dmtn) {
Iterator atts = el.getAttributes().iterator();
while (atts.hasNext()) {
Attribute att = (Attribute)atts.next();
DefaultMutableTreeNode node =
new DefaultMutableTreeNode("@" + att.getName());
node.add(new DefaultMutableTreeNode(att.getValue()));
dmtn.add(node);
}
}
}