DOM4J介绍
DOM4J是一款开源的库,主要应用于解析XML、XPath和XSLT。由于它使用很简单,目前特别是在大数据领域,DOM4J越来越受到数据分析者的青睐,下面就来看看它是如何解析XML文件的。
使用DOM4J操作XML
在介绍之前,先简单说一说DOM4J的基本语法。
1、读取XML文件,获得document对象。
SAXReader reader = new SAXReader();
Document document = reader.read(new File("xmlfiles/dom4jtest.xml"));
2、获取文档根节点(或某个节点)。
Element root = document.getRootElement();
3、获取根节点(或某个节点)的单个子节点。
Element child = root.element("name");
4、获取根节点(或某个节点)的多个子节点并进行遍历
List children=root.elements("name");
Iterator it = children.iterator();
while (it.hasNext()){
Element element = (Element) it.next();
}
5、添加节点。
Element newElm=elm.addElement("gender");
6、设置节点内容。
newElm.setText("男");
7、获取节点内容。
String childNameText = newElm.getText();
或
String childNameText = elm.elementText("gender");
8、删除节点。
Element childElm = elm.element("name");
elm.remove(childElm);
9、获取节点属性。
Attribute attrId = elm.attribute("id");
10、设置节点属性和文本值。
elm.addAttribute("class","2");
11、获取属性文本值。
String text = attrId.getValue();
12、删除节点属性。
Attribute attrId = elm.attribute("id");
elm.remove(attrId);
13、将文档写入XML文件。
OutputFormat format=OutputFormat.createPrettyPrint();
//format.setEncoding("UTF-8");
XMLWriter writer =new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
writer.write(document);
writer.flush();
writer.close();
使用DOM4J操作XML完整实例
先创建一个xml文件,文件内容如下:
李赞
11
男
宋蔚然
10
女
桑月
10
女
李师师
12
女
王老师
郭啸天
10
男
DOM4J操作XML代码如下:
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;
public class Dom4jTest {
public static void main(String[] args) {
try {
SAXReader reader =new SAXReader();
Document document=reader.read(new File("xmlfiles/dom4jtest.xml"));
//获取根节点
Element root=document.getRootElement();
//获取根节点下所有名为student的子节点
List students = root.elements("student");
Iterator it = students.iterator();
//遍历子节点
while (it.hasNext()){
Element elm=(Element)it.next();
//在每个student节点增加teacher子节点
Element newElm=elm.addElement("teacher");
//设置属性内容
newElm.setText("王老师");
//获取id属性
Attribute attrId = elm.attribute("id");
//获取id属性内容
String textId = attrId.getValue();
elm.addAttribute("class","四年级一班");
System.out.print(textId+"\t");
System.out.print(elm.attribute("class").getValue()+"\t");
System.out.print(elm.elementText("name")+"\t");
System.out.print(elm.elementText("age")+"\t");
System.out.print(elm.elementText("gender")+"\t");
System.out.print(elm.elementText("teacher")+"\t");
System.out.println();
}
OutputFormat format= OutputFormat.createPrettyPrint();
//format.setEncoding("UTF-8");
XMLWriter xmlWriter=new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
System.out.println("数据已成功保存。");
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下:
1 四年级一班 李赞 11 男 王老师
2 四年级一班 宋蔚然 10 女 王老师
3 四年级一班 桑月 10 女 王老师
4 四年级一班 李师师 12 女 王老师
5 四年级一班 郭啸天 10 男 王老师
数据已成功保存
代码执行后xml文件内容如下:
李赞
11
男
王老师
宋蔚然
10
女
王老师
桑月
10
女
王老师
李师师
12
女
王老师
郭啸天
10
男
王老师