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