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