用Dom4j读取xml文件,在xml文件夹下有test2.xml文件:
<?xml version="1.0" encoding="gb2312"?>
<students name="zizhu" age="21">
<student age="25">
<name>崔卫兵</name>
<college>PC学院</college>
</student>
<student>
<name>cwb</name>
<college leader="学院领导">PC学院</college>
</student>
<student age="45">
<name>xxxxx</name>
<college leader="">xxx学院</college>
<element name="测试">
<next>下一个</next>
<subElement>hello,done!!!</subElement>
</element>
</student>
</students>
源码:
package com.test;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class JdomTest2 {
public static void main(String[] args) {
SAXReader reader=new SAXReader();
try {
//总结一:此处得到文档的位置:任何一个读文件的方式必定会提供一个拥有InputStream输入流的操作方式,可以说这种方式是万能的
//ClassLoader默认的是当前项目的classpath路径,即bin目录
Document document=reader.read(JdomTest2.class.getClassLoader().getResourceAsStream("xml/test2.xml"));
Element root=document.getRootElement();//得到根节点
tree(root);//遍历
} catch (DocumentException e) {
e.printStackTrace();
}
}
//遍历
public static void tree(Element element){
/**
* 形如这种方式:<element>
* <name>zizhu</name>
* <age>21</age>
* <address>上海</address>
* </element>,其中所有的都能用elementIterator这种方式遍历出来,取的时候用getName和getText来取
*/
System.out.println("节点的名字:"+element.getName()+"\t节点的值:"+element.getText());
//遍历节点的所有属性
//总结二:得到元素所有的属性,attributeIterator
//形如这种方式<element name="hello" age=21 address="上海">...</>,其中所有的属性都能用这种方式遍历出来
Iterator rootAttriIter=element.attributeIterator();
while(rootAttriIter.hasNext()){
Attribute rootAttribute=(Attribute)rootAttriIter.next();
//形如这种方式<element name="hello" age=21 address="上海">...</>,通过getName取到属性的名字,通过getValue取到值
System.out.print("节点的属性的名字和值:"+rootAttribute.getName()+"="+rootAttribute.getValue()+"\t");
}
System.out.println();
//遍历节点的所有子节点
Iterator subElementIter=element.elementIterator();
while(subElementIter.hasNext()){
Element subElement=(Element)subElementIter.next();
tree(subElement);
}
}
}
输出结果:
节点的名字:students 节点的值:
节点的属性的名字和值:name=zizhu 节点的属性的名字和值:age=21
节点的名字:student 节点的值:
节点的属性的名字和值:age=25
节点的名字:name 节点的值:崔卫兵
节点的名字:college 节点的值:PC学院
节点的名字:student 节点的值:
节点的名字:name 节点的值:cwb
节点的名字:college 节点的值:PC学院
节点的属性的名字和值:leader=学院领导
节点的名字:student 节点的值:
节点的属性的名字和值:age=45
节点的名字:name 节点的值:xxxxx
节点的名字:college 节点的值:xxx学院
节点的属性的名字和值:leader=
节点的名字:element 节点的值:
节点的属性的名字和值:name=测试
节点的名字:next 节点的值:下一个
节点的名字:subElement 节点的值:hello,done!!!