- 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 JDOM 解析器 - 修改 XML 文档
Java JDOM 解析器是 Java 中的一个 API,它包含用于修改 XML 文档的类和接口。此 API 以树形结构的形式表示 XML 文档,并且可以轻松检索每个元素。因此,修改变得非常容易。我们可以使用 setText() 方法修改内容,并使用 addContent() 方法添加新元素。在本章中,我们将通过两个示例了解如何修改现有的 XML 文档。
使用 JDOM 解析器修改 XML
我们可以通过以下步骤在 Java JDOM 解析器中修改 XML 文档:
- 步骤 1:创建 SAXBuilder 对象
- 步骤 2:读取 XML
- 步骤 3:解析 XML 文档
- 步骤 4:更新 XML 文档的内容
- 步骤 5:将内容写入 XML 文件
- 步骤 6:输出到控制台以进行测试
有关前三个步骤,请参阅本节的第二章。
步骤 4:更新 XML 文档的内容
在完成前三个步骤后,我们已成功读取了需要更新的 XML 文档。现在,我们以 JDOM 文档的形式拥有了 XML 文件。要从文档中获取任何信息,首先,我们始终应该获取根元素。检索根元素后,我们可以获取根元素内所有元素的信息。
有关步骤 5 和 6,请参阅本节的本章。
更新文本内容
要更新任何元素的文本内容,我们可以使用 Element 类的 setText() 方法。此方法以字符串形式将文本内容作为参数。如果文本内容已存在,则会用新文本内容更新旧文本内容。
示例
这里,我们有college.xml文件,其中包含三个 department 元素。我们将把 id 为 102 的部门的员工人数从 23 修改为 14。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><college>
<department id="101">
<name>Computer Science</name>
<staffCount>20</staffCount>
</department>
<department id="102">
<name>Electrical and Electronics</name>
<staffCount>23</staffCount>
</department>
<department id="103">
<name>Mechanical</name>
<staffCount>15</staffCount>
</department>
</college>
以下ModifyTextContent.java程序使用 SAXBuilder 对象读取上述 college.xml 文件。在获取 department 元素列表后,我们使用 getAttributeValue() 方法查找 id 为 102 的部门。之后,我们使用 setText() 方法更新文本内容。
import java.io.File;
import java.util.List;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;
public class ModifyTextContent {
public static void main(String args[]) {
try {
//Creating a SAXBuilder Object
SAXBuilder saxBuilder = new SAXBuilder();
//Reading the XML
File inputFile = new File("college.xml");
//Parsing the XML Document
Document doc = saxBuilder.build(inputFile);
//Retrieving the Root Element
Element RootElement = doc.getRootElement();
List<Element> deptList = RootElement.getChildren("department");
//Finding "department" with id=102 in the list
for(int index=0; index<deptList.size();index++) {
Element department = deptList.get(index);
if(department.getAttributeValue("id").equals("102")) {
Element staffCount = department.getChild("staffCount");
//Updating the staff count
staffCount.setText("14");
break;
}
}
//writing the modified content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
JDOMSource source = new JDOMSource(doc);
StreamResult result = new StreamResult(new File("college.xml"));
transformer.transform(source, result);
//Output to console for testing
XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出
以下是更新 staffCount 后更新的 XML 文档。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><college>
<department id="101">
<name>Computer Science</name>
<staffCount>20</staffCount>
</department>
<department id="102">
<name>Electrical and Electronics</name>
<staffCount>14</staffCount>
</department>
<department id="103">
<name>Mechanical</name>
<staffCount>15</staffCount>
</department>
</college>
添加新元素
Element 类的 addContent() 方法接受子元素并将其附加到当前元素下一级。它始终将新元素添加到末尾。如果我们传递两个参数,索引和子元素,则子元素将插入到指定的索引处。
示例
现在,我们将在下面的AddNewElements.java程序中向 college 元素添加另一个名为“Civil”的部门。我们已创建了 department 的子元素并将其添加到 department 元素中。之后,我们将 department 添加到根元素中。
import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;
public class AddNewElements {
public static void main(String args[]) {
try {
//Creating a SAXBuilder Object
SAXBuilder saxBuilder = new SAXBuilder();
//Reading the XML
File inputFile = new File("college.xml");
//Parsing the XML Document
Document doc = saxBuilder.build(inputFile);
//Retrieving the Root Element
Element RootElement = doc.getRootElement();
//Creating new "department" Element
Element department=new Element("department");
department.setAttribute("id","104");
//Creating "name" Element for department
Element name=new Element("name");
name.setText("Civil");
//Creating "staffCount" Element for department
Element staffCount=new Element("staffCount");
staffCount.setText("18");
//Appending Elements
department.addContent(name);
department.addContent(staffCount);
RootElement.addContent(department);
//writing the modified content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
JDOMSource source = new JDOMSource(doc);
StreamResult result = new StreamResult(new File("college.xml"));
transformer.transform(source, result);
//Output to console for testing
XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出
添加“Civil”部门后的更新文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<college>
<department id="101">
<name>Computer Science</name>
<staffCount>20</staffCount>
</department>
<department id="102">
<name>Electrical and Electronics</name>
<staffCount>23</staffCount>
</department>
<department id="103">
<name>Mechanical</name>
<staffCount>15</staffCount>
</department>
<department id="104">
<name>Civil</name>
<staffCount>18</staffCount>
</department>
</college>