dom4j是一个Java的XML API,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如hibernate,包括sun公司自己的JAXM也用了Dom4j。
通过一个案例来了解dom4j如何解析xml文件的。
对应的xml文件
<?xml version="1.0" encoding="utf-8"?>
<Person>
<Student>
<name>Tom</name>
<age>22</age>
<qq>11001441</qq>
</Student>
</Person>
对应的操作类 @Test
public void testXml() throws Exception {
SAXReader reader = new SAXReader();//创建一个SAXReader对象
Document doc = reader.read(new File("./src/demo.xml"));//获取document对象,读取指定目录下的xml文件
//通过Student根节点多去他所有的子节点得到了一个iterator迭代器
Iterator<Element> it_element = doc.getRootElement().elementIterator("Student");
//遍历Student
while(it_element.hasNext()){
Element element = it_element.next();
//得到所有子节点的对应的值
System.out.println(element.getStringValue());
//根据子节点获取对应的值
String age = element.elementText("age");
System.out.println(age);
}
}
以上这种事对指定某个节点获取对应的值操作的,另外一种见下文:
public class XmlTest {
@Test
public void testXml() throws Exception {
SAXReader reader = new SAXReader();//创建一个SAXReader对象
Document doc = reader.read(new File("./src/demo.xml"));//获取document对象,读取指定目录下的xml文件
Element element = doc.getRootElement();
this.listNodes(element);
}
//遍历当前节点下的所有节点
public void listNodes(Element node){
System.out.println("当前节点的名称:" + node.getName());
//首先获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
//遍历属性节点
for(Attribute attribute : list){
System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
}
//如果当前节点内容不为空,则输出
if(!(node.getTextTrim().equals(""))){
System.out.println( node.getName() + ":" + node.getText());
}
//同时迭代当前节点下面的所有子节点
//使用递归
Iterator<Element> iterator = node.elementIterator();
while(iterator.hasNext()){
Element e = iterator.next();
listNodes(e);
}
}
}
以上获取所有节点的名称和对应的值