- 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 DOM 解析器 - 建立 XML 文件
Java DOM 解析器 API 包含建立 XML 文件的方法、介面和類。使用此 API,我們可以透過 Java 應用程式從頭開始建立 XML 文件。`createElement()` 方法建立新元素,`appendChild()` 方法將建立的元素附加到已存在的元素。
使用 Java DOM 解析器建立 XML
我們可以透過以下步驟使用 Java 中的 DOM 解析器建立 XML 文件:
- 步驟 1:建立 DocumentBuilder 物件
- 步驟 2:建立一個新的 Document
- 步驟 3:建立根元素
- 步驟 4:將元素附加到根元素
- 步驟 5:將內容寫入 XML 檔案
- 步驟 6:使用控制檯測試輸出
步驟 1 請參考此頁面。
步驟 2:建立一個新的 Document
使用上面步驟中建立的 DocumentBuilder 物件,使用 `newDocument()` 函式建立一個新的文件。
Document doc = dBuilder.newDocument();
步驟 3:建立根元素
每個 XML 文件都應該擁有一個根元素,也稱為父元素。我們可以使用 `createElement()` 方法建立根元素,並將其附加到上一步中建立的文件。
Element rootElement = doc.createElement("root");
doc.appendChild(rootElement);
步驟 4:將元素附加到根元素
在根元素內,我們可以建立任意數量的子元素,並以與將根元素附加到文件相同的方式附加它們。要在元素內寫入文字內容,可以使用 `createTextNode()` 方法。我們還可以使用 `createAttribute()` 方法為元素建立屬性。
Element child = doc.createElement("child");
rootElement.appendChild(child);
child.appendChild(doc.createTextNode("text_content_here"));
Attr attr = doc.createAttribute("child");
步驟 5:將內容寫入 XML 檔案
在使用相應的屬性構建文件中的元素之後,我們需要透過建立 Transformer 物件將此內容寫入 XML 檔案,該物件將我們的源文件轉換為 StreamResult 並將其儲存在指定的檔案路徑中,並使用給定的名稱。
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("filepath:\\new.xml"));
transformer.transform(source, result);
步驟 6:使用控制檯測試輸出
我們可以透過在控制檯上列印來測試我們的 XML 檔案。這是一個可選步驟。
StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult);
建立基本的 XML 檔案
要建立文件元素,我們使用方法`createElement("element_name")`。此方法將元素名稱作為引數,並返回一個新的 Element 物件。
獲得新的 Element 物件後,我們可以使用`appendChild(Element)`方法將此 Element 物件附加到文件。此方法還用於將元素附加到另一個元素(建立子元素)。
cars.xml
我們想要在 D 盤建立名為“cars.xml”的以下 xml 檔案。
<cars> <supercars>Ferrari</supercars> </cars>
CreateXMLDemo.java
在下面的程式碼中,我們建立了一個名為“cars”的根元素,並附加了一個名為“supercars”的子元素。我們還向 supercars 元素添加了文字內容。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
public class CreateXMLDemo {
public static void main(String argv[]) {
try {
//Creating a DocumentBuilder Object
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//Create a new Document
Document doc = dBuilder.newDocument();
//Creating the root element
Element rootElement = doc.createElement("cars");
doc.appendChild(rootElement);
//Appending elements to the root element
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
supercar.appendChild(doc.createTextNode("Ferrari"));
//writing the content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\cars.xml"));
transformer.transform(source, result);
//Output to console for testing
StreamResult consoleResult = new StreamResult(System.out);
transformer.transform(source, consoleResult);
} catch (Exception e) {e.printStackTrace();}
}
}
輸出
為了測試,我們在控制檯上列印了文件輸出。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><cars><supercars>Ferrari</supercars></cars>
建立帶有屬性的 XML 檔案
可以使用方法`createAttribute("Attribute_name")`為元素建立屬性。此 Document 介面方法將屬性的名稱作為引數,並返回`Attr`物件。`setValue("value")`方法用於設定屬性的值。
現在,要將此屬性節點設定為 Element,我們使用`setAttributeNode(Attr)`方法以及我們需要設定此屬性的 Element 物件。
newcars.xml
我們需要在 D 盤建立以下“newcars.xml”。
<cars> <supercars company="Ferrari"> <carname type="formula one">Ferrari 101</carname> <carname type="sports">Ferrari 202</carname> </supercars> </cars>
CreateXMLAttributeDemo.java
我們為 supercars 元素建立了兩個 carname 元素。此外,使用 `setAttributeNode()` 方法,我們為每個 carname 元素添加了兩個屬性。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
public class CreateXMLAttributeDemo {
public static void main(String argv[]) {
try {
//Creating a DocumentBuilder Object
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//Creating a new Document
Document doc = dBuilder.newDocument();
//Creating the root element
Element rootElement = doc.createElement("cars");
doc.appendChild(rootElement);
//Appending sub element to the root element
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
//Setting attribute to the sub element
Attr attr = doc.createAttribute("company");
attr.setValue("Ferrari");
supercar.setAttributeNode(attr);
//Adding First child element to sub element
Element carname = doc.createElement("carname");
Attr attrType = doc.createAttribute("type");
attrType.setValue("formula one");
carname.setAttributeNode(attrType);
carname.appendChild(doc.createTextNode("Ferrari 101"));
supercar.appendChild(carname);
//Adding second child element to sub element
Element carname1 = doc.createElement("carname");
Attr attrType1 = doc.createAttribute("type");
attrType1.setValue("sports");
carname1.setAttributeNode(attrType1);
carname1.appendChild(doc.createTextNode("Ferrari 202"));
supercar.appendChild(carname1);
//writing the content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\newcars.xml"));
transformer.transform(source, result);
//Output to console for testing
StreamResult consoleResult = new StreamResult(System.out);
transformer.transform(source, consoleResult);
} catch (Exception e) { e.printStackTrace(); }
}
}
輸出
為了測試,我們在控制檯上列印了文件輸出。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><cars><supercars company="Ferrari"><carname type="formula one">Ferrari 101</carname><carname type="sports">Ferrari 202</carname></supercars></cars>