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