- 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>