- Java XML 教程
- Java XML 首页
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XML 有用资源
- Java XML - 常见问题解答
- Java XML - 快速指南
- Java XML - 有用资源
- Java XML - 讨论
Java DOM4J 解析器 - 修改 XML 文档
Java DOM4J API 提供了修改 XML 文档的方法。我们可能会遇到需要更新大型 XML 文档中某些细节的情况。例如,一个电子商务网站有很多产品,其价格可能每天或每月都会变化。在这种情况下,修改现有文件比重新创建 XML 文档更简单。本章我们将通过一些例子学习如何使用 DOM4J API 修改现有的 XML 文档。
使用 Java DOM4J 解析器修改 XML
以下是使用 Java DOM4J 解析器修改 XML 文档的步骤:
- 步骤 1:创建 SAXReader 对象
- 步骤 2:读取 XML 文件
- 步骤 3:解析 XML
- 步骤 4:提取根元素
- 步骤 5:修改元素
- 步骤 6:创建 FileOutputStream
- 步骤 7:将更新后的 XML 文档写入文件
- 步骤 8:打印 XML 文档
关于前四个步骤,请参考本节的 解析 XML 文档 一章。
步骤 5:修改元素
在步骤 4 提取根元素后,我们可以使用 elements() 方法获取其任何子元素。我们可以通过编辑文本内容、更改属性值、添加新属性等方式修改现有元素。
关于最后三个步骤,请参考本节的 创建 XML 文档 一章。
修改文本内容
要修改元素的文本内容,可以使用 setText() 方法设置文本内容。它接受一个字符串作为参数,并用新文本内容更新旧文本内容。此方法在 Node 和 Element 接口中都可用。
示例
在下面的 studentData.xml 文件中,我们需要将学号为 493 的学生的成绩从 80 分更新为 64 分。
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>80</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
下面的 ModifyTextContent.java 程序使用 SAXReader 读取上面的 studentData.xml 文件。使用 elementIterator("student") 方法,我们获得了迭代器中的所有学生元素。我们迭代所有元素以使用 attributeValue() 方法查找学号为 493 的学生,并更新成绩元素的文本内容。
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class ModifyTextContent {
public static void main(String[] args) {
try {
//Creating SAXReader
SAXReader reader = new SAXReader();
//Reading the XML file
File inputFile = new File("studentData.xml");
//Parsing the XML
Document document = reader.read(inputFile);
//Extracting the root
Element RootElement = document.getRootElement();
//Modifying the elements
Iterator<Element> students = RootElement.elementIterator("student");
while(students.hasNext()) {
Element student = students.next();
if(student.attributeValue("rollno").equals("493")) {
Element marks = student.element("marks");
marks.setText("64");
}
}
//Creating a FileOutputStream
FileOutputStream newFile = new FileOutputStream("studentData.xml");
//Writing the updated XML document into file
XMLWriter writer = new XMLWriter(newFile);
writer.write( document );
//Printing the XML document
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter consoleWriter = new XMLWriter( System.out, format );
consoleWriter.write( document );
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出
学号为 493 的学生的成绩已从 80 分更新为 64 分。
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>64</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
添加新元素
addElement() 方法将新元素添加到现有 XML 文档中,添加到当前元素所有现有子元素的末尾。我们需要将元素的标签名称作为参数传递。类似地,addText() 方法向元素添加文本内容。addAttribute() 方法向当前元素添加新属性。我们需要将属性名称和属性值作为参数传递。
下面的 AddNewElements.java 程序读取我们在上一个示例中使用的 studentData.xml 文件,并使用上述方法添加新学生的信息。
import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class AddNewElements {
public static void main(String[] args) {
try {
//Creating SAXReader
SAXReader reader = new SAXReader();
//Reading the XML file
File inputFile = new File("studentData.xml");
//Parsing the XML
Document document = reader.read(inputFile);
//Extracting the root
Element RootElement = document.getRootElement();
//Modifying the elements
Element student = RootElement.addElement("student").addAttribute("rollno", "693");
student.addElement("firstname").addText("John");
student.addElement("lastname").addText("Daniel");
student.addElement("nickname").addText("Johny");
student.addElement("marks").addText("78");
//Creating a FileOutputStream
FileOutputStream newFile = new FileOutputStream("studentData.xml");
//Writing the updated XML document into file
XMLWriter writer = new XMLWriter(newFile);
writer.write( document );
//Printing the XML document
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter consoleWriter = new XMLWriter( System.out, format );
consoleWriter.write( document );
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出
添加新学生信息后的文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>64</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
<student rollno="693">
<firstname>John</firstname>
<lastname>Daniel</lastname>
<nickname>Johny</nickname>
<marks>78</marks>
</student>
</class>