主要用到SAXReader类对象,可以当成一个工厂,利用其实例方法对xml文档进行解析,相比于DOM而言,他可以直接获取根节点,有利于我们做一些增删改查的操作
例如:XML文档的一个读取
package Test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
/**
* @version 1.0
* @author: 小原
* @date: 2021-05-31 13:21
*/
public class Test {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document document = null;
try {
document=reader.read(new File("src/School.xml"));
Element root = document.getRootElement();
List<Element> elements = root.elements();
for (int i = 0; i < elements.size(); i++) {
if (i==2){
elements.get(i).setText("小日本");
}
System.out.println(elements.get(i).getStringValue());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
案例(2):对xml文档标签的指定位置追加,其中父子关系一定不能搞混了
package Test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-01 14:44
*/
public class TestDOM4JAdd {
/**
* 程序入口
* @param args 入口参数
*/
public static void main(String[] args) throws DocumentException, IOException {
SAXReader reader =new SAXReader();
Document document = reader.read("src/Phone.xml");
Element root = document.getRootElement();
root.addElement("Brand").addAttribute("name","什么");
// Element element = brand.addAttribute("name", "三星");
// root.add(element);
System.out.println(root.elements().size());
OutputFormat of=OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
of.setExpandEmptyElements(true);
XMLWriter xw=new XMLWriter(new FileWriter("src/Phone.xml"),of);
xw.write(document);
xw.close();
}
}
案例(3):对XML文档的一个删除操作
package Test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-01 12:22
*/
public class TestDOM4jDelete {
/**
* 程序入口
*
* @param args 入口参数
*/
public static void main(String[] args) throws DocumentException, IOException {
SAXReader reader=new SAXReader();
Document document = reader.read("src/Phone.xml");
Element root = document.getRootElement();
for (int i = 0; i <root.elements().size() ; i++) {
if(root.elements().get(i).attribute("name").getValue().equals("三星")){
root.remove(root.elements().remove(i));
}
}
OutputFormat of=OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
XMLWriter xw=new XMLWriter(new FileWriter("src/Phone1.xml"),of);
xw.write(document);
xw.close();
// List<Element> elements= root.elements();
// System.out.println(elements.size());
}
}
案例(4):对xml的一个修改操作
package Test;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.Attr;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.List;
/**
* @version 1.0
* @author: 小原
* @date: 2021-05-31 22:13
*/
public class TestDOM4JUpdate {
/**
* 程序入口
* @param args 入口参数
*/
public static void main(String[] args) throws DocumentException, TransformerException, IOException {
SAXReader reader=new SAXReader();
Document document=reader.read(new File("src/Phone.xml"));
Element root = document.getRootElement();
List<Element> elements = root.elements();
for (int i = 0; i <elements.size() ; i++) {
String temp=elements.get(i).attribute("name").getValue();
if("三星牛逼".equals(temp)){
Attribute name = elements.get(i).attribute("name");
name.setValue("三星");
}
System.out.println(elements.get(i).attribute("name").getValue());
}
//保存设置
OutputFormat of=OutputFormat.createPrettyPrint();
//设置字节码
of.setEncoding("utf-8");
//xml的写入
XMLWriter xm=new XMLWriter(new FileWriter("src/Phone.xml"),of);
xm.write(document);
xm.close();
}
}
以上用到的jar包在https://dom4j.github.io/ 此上案例用到的是2.0.3版本