import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XMLDom4j {
public static void main(String args[]){
/*
* 读取xml的流
* SAXReader解析XML:如果XML很小,那么将整个XML读入内存,若很大,则解析一点读一点。
* DOM解析XML:直接将整个XML看做一个对象读入内存
*/
SAXReader reader = new SAXReader();
try {
/*把XML看作成一个对象*/
Document doc = reader.read(new File("chenhuan.xml"));
/*获取XML的根节点*/
Element rootElement = doc.getRootElement();
/*打印根节点的名称*/
print(rootElement.getName());
/*遍历根节点中的子节点*/
Iterator<Element> iter = rootElement.elementIterator();
while(iter.hasNext()){
Element element = (Element)iter.next();
print(element.getName());
/*遍历子节点中的属性和值*/
for(Iterator<Attribute> i = element.attributeIterator() ; i.hasNext();){
Attribute attr = (Attribute)i.next();
print(attr.getName()+"--"+attr.getValue());
}
/*遍历子节点中的子节点*/
for(Iterator<Element> ii = element.elementIterator(); ii.hasNext();){
Element element1 = (Element)ii.next();
print(element1.getName());
}
}
/*采用递归模式将所有节点都遍历出来*/
treeWalk(rootElement);
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void print(Object o){
System.out.println(o);
}
public static void treeWalk(Element rootElement){
print(rootElement.nodeCount());
for(int i = 0 , size = rootElement.nodeCount() ; i < size ; i++){
Node node = rootElement.node(i);
if(node instanceof Element){
System.out.println("node节点:"+node.getName());
treeWalk((Element)node);
}
}
}
}