XML資源:
Maven Repository-Dom4J:https://mvnrepository.com/artifact/dom4j/dom4j
Maven Repository-Jaxen:https://mvnrepository.com/artifact/jaxen/jaxen
XML實戰:
目標文件(resources/car.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<車輛清單>
<汽車>
<車牌 生產時間="2019">奧迪</車牌>
<產地>北京</產地>
</汽車>
<汽車>
<車牌 生產時間="2020">奔馳</車牌>
<產地>上海</產地>
</汽車>
</車輛清單>
讀取(Dom4jParseTest.java):
package com.example.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 org.junit.Test;
import java.io.*;
import java.util.List;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jRetrieve(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//顯示根元素的名稱
Element rootElement = document.getRootElement();
System.out.println(rootElement.getName());
//取得根元素下的所有子元素
List<Element> elements = rootElement.elements();
System.out.println("根元素下子元素數量:" + elements.size());
for (Element element:elements){
//取得子元素的文本
System.out.println("車牌:" + element.elementText("車牌"));
System.out.println("產地:" + element.elementText("產地"));
//取得子元素的屬性
System.out.println("生產時間:" + element.element("車牌").attribute("生產時間").getValue());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
增加-默認(Dom4jParseTest.java):
package com.example.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 org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jAdd(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得根元素的第一個子元素
Element firstElement = (Element)document.getRootElement().elements().get(0);
//添加子元素“單價”並設置文本“30”
firstElement.addElement("單價").setText("30");
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<車輛清單>
<汽車>
<車牌 生產時間="2019">奧迪</車牌>
<產地>北京</產地>
<單價>30</單價>
</汽車>
<汽車>
<車牌 生產時間="2020">奔馳</車牌>
<產地>上海</產地>
</汽車>
</車輛清單>
增加-指定位置(Dom4jParseTest.java):
package com.example.test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import java.io.*;
import java.util.List;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jAdd(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得根元素下的所有子元素
List<Element> elements = document.getRootElement().elements();
//創建新元素
Element element = DocumentHelper.createElement("汽車");
element.setText("指定位置增加元素");
//指定位置增加元素
elements.add(1, element);
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<車輛清單>
<汽車>
<車牌 生產時間="2019">奧迪</車牌>
<產地>北京</產地>
</汽車>
<汽車>指定位置增加元素</汽車>
<汽車>
<車牌 生產時間="2020">奔馳</車牌>
<產地>上海</產地>
</汽車>
</車輛清單>
更新(Dom4jParseTest.java):
package com.example.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 org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jUpdate(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得根元素的第一個子元素
Element firstElement = (Element)document.getRootElement().elements().get(0);
//修改子元素文本爲“深圳”
firstElement.element("產地").setText("深圳");
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<車輛清單>
<汽車>
<車牌 生產時間="2019">奧迪</車牌>
<產地>深圳</產地>
</汽車>
<汽車>
<車牌 生產時間="2020">奔馳</車牌>
<產地>上海</產地>
</汽車>
</車輛清單>
刪除(Dom4jParseTest.java):
package com.example.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 org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jDelete(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得根元素的第一個子元素
Element firstElement = (Element)document.getRootElement().elements().get(0);
//刪除子元素
firstElement.remove(firstElement.element("產地"));
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<車輛清單>
<汽車>
<車牌 生產時間="2019">奧迪</車牌>
</汽車>
<汽車>
<車牌 生產時間="2020">奔馳</車牌>
<產地>上海</產地>
</汽車>
</車輛清單>
創建(Dom4jParseTest.java):
package com.example.test;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jCreate(){
try {
//創建空的XML
Document document = DocumentHelper.createDocument();
//添加根元素
document.addElement("root").setText("根元素");
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<root>根元素</root>
String轉換爲XML(Dom4jParseTest.java):
package com.example.test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jStringToXML(){
try {
String text = "<產地>上海</產地>";
//String->XML
Document document = DocumentHelper.parseText(text);
//寫入XML文件
OutputStream outputStream = new FileOutputStream(file);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(outputStream, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果文件(car.xml)
<?xml version="1.0" encoding="UTF-8"?>
<產地>上海</產地>
XML轉換爲String(Dom4jParseTest.java):
package com.example.test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.*;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jXMLToString(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得根元素
Element rootElement = document.getRootElement();
//XML-String
String xmlStr = rootElement.asXML();
System.out.println(xmlStr);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
XPath定位(Dom4jParseTest.java):
package com.example.test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.*;
import java.util.List;
public class Dom4jParseTest {
private File file = new File(this.getClass().getClassLoader().getResource("car.xml").getPath());
@Test
public void dom4jXMLToString(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
//取得所有汽車的產地
String xpath = "//產地";
List<Element> elements = document.selectNodes(xpath);
for (Element element:elements){
System.out.println(element.getText());
}
//取得第一輛汽車的產地
Element firstElement = (Element) document.selectSingleNode(xpath);
System.out.println(firstElement.getText());
//取得生產時間爲2020的車的車牌
String xpath2020 = "//車牌[@生產時間='2020']";
Element secondElement = (Element) document.selectSingleNode(xpath2020);
System.out.println(secondElement.getText());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}