Java JDOM 解析器 - 建立 XML 文件



Java JDOM 解析器是一個 Java API,它包含用於從頭建立 XML 文件的類和方法。我們可以建立一個新的 JDOM 文件物件,並使用 Document 和 Element 介面中提供的方法新增元素和屬性。在本章中,我們將詳細介紹如何使用 setRootElement()、addContent()、setText() 和 setAttribute() 方法建立 XML 檔案。

使用 Java JDOM 解析器建立 XML

我們可以透過以下步驟使用 JDOM 解析器在 Java 中建立 XML 文件:

  • 步驟 1:建立 JDOM 文件物件
  • 步驟 2:建立和追加根元素
  • 步驟 3:建立元素和屬性
  • 步驟 4:將元素追加到根元素
  • 步驟 5:將內容寫入 XML 檔案
  • 步驟 6:使用控制檯測試輸出

步驟 1:建立 JDOM 文件物件

org.jdom2 包包含 Document 類。它代表 XML 文件。此類具有訪問根元素以及文件級別資訊的方法。我們如下建立一個新文件:

Document doc = new Document();

步驟 2:建立和追加根元素

XML 文件必須包含一個根元素。我們使用 org.jdom2 包的 Element 類建立根元素。如果我們向建構函式提供一個字串,它將建立一個具有該提供的本地名稱的元素。

Document 類中的 setRootElement() 方法設定文件的根元素。此方法將 Element 作為引數,並將其設定為根元素。如果根元素已存在,則舊的根 Element 將被此提供的 Element 替換。

Element RootElement = new Element("root");
doc.setRootElement(RootElement);

步驟 3:建立元素和屬性

我們可以按照上一步建立根元素的方式建立元素。要為 Element 設定屬性,我們使用 setAttribute() 方法,如下所示:

Element newElement = new Element("FirstElement");
newElement.setAttribute("attr_name","attr_value");

步驟 4:將元素追加到根元素

上一步中建立的元素現在使用 addContent() 方法附加到根元素。此方法採用內容列表形式的單個元素或元素集合,並相應地將它們新增到元素中。

RootElement.addContent(newElement);

步驟 5:將內容寫入 XML 檔案

TransformerFactory 類用於建立 Transformer 物件的新例項。使用 Transformer 類中的 transform() 函式,將源轉換到目標結果。我們透過將文件作為引數來建立 JDOMSource 物件。此 JDOMSource 物件將轉換為 StreamResult,如下所示:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
JDOMSource source = new JDOMSource(doc);
StreamResult result = new StreamResult(new File("newFile.xml"));
transformer.transform(source, result);

步驟 6:使用控制檯測試輸出

這是一個可選步驟,用於測試目的。要在控制檯上列印輸出,將建立一個 XMLOutputter 物件,並傳遞 Document 物件,如下所示:

XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);

建立簡單的 XML 檔案

使用上述步驟,讓我們建立一個僅包含根元素的簡單 XML 檔案。建立一個新的文件物件,並使用 setRootElement() 方法附加根元素。

Element 物件的 setText() 方法採用字串形式的文字內容,並將其附加到 Element。

示例

這是我們需要建立的 XML 檔案。它有一個名為“cars”的根元素和文字內容“Ferrari”。

<cars>Ferrari</cars>

下面的 CreateXMLFile.java 建立 XML 檔案並將其儲存在 D 盤中,檔名設定為“cars.xml”。

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.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;

public class CreateXMLFile {
   public static void main(String[] args) {
      try{
         
         //Creating JDOM Document object
         Document doc = new Document();
         
         //Creating and appending Root Element
         Element carsElement = new Element("cars");
         carsElement.setText("Ferrari");
         doc.setRootElement(carsElement);

         //writing the content into XML file
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         JDOMSource source = new JDOMSource(doc);
         StreamResult result = new StreamResult(new File("D:\\cars.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();
      }
   }
}

為了測試目的,我們在控制檯上列印了 XML 文件的內容。

<?xml version="1.0" encoding="UTF-8"?>
<cars>Ferrari</cars>

建立屬性

現在讓我們向根元素新增子元素。此外,讓我們向元素新增屬性。在此示例中,我們將看到如何建立元素及其屬性並將它們附加到根元素。每個元素上的 setAttribute() 方法設定屬性,而 setText() 方法用於設定每個元素的文字內容。

示例

這是我們需要建立的 cars.xml 檔案:

<cars>
<supercars company="Ferrari">
<carname type="formula one">Ferrari 101</carname>
<carname type="sports">Ferrari 202</carname>
</supercars>
</cars>

下面的 CreateAttributes.java 程式在 D 盤中建立 cars.xml 檔案。

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;

public class CreateAttributes {
   public static void main(String[] args) {
      try{
         
         //Creating JDOM Document object
         Document doc = new Document();
         
         //Creating and appending Root Element
         Element carsElement = new Element("cars");
         doc.setRootElement(carsElement);

         //Creating elements and attributes
         Element supercarElement = new Element("supercars");
         supercarElement.setAttribute("company","Ferrari");

         Element carElement1 = new Element("carname");
         carElement1.setAttribute("type","formula one");
         carElement1.setText("Ferrari 101");

         Element carElement2 = new Element("carname");
         carElement2.setAttribute("type","sports");
         carElement2.setText("Ferrari 202");

         supercarElement.addContent(carElement1);
         supercarElement.addContent(carElement2);
         
         //Appending Elements to Root
         carsElement.addContent(supercarElement);

         //writing the content into XML file
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         JDOMSource source = new JDOMSource(doc);
         StreamResult result = new StreamResult(new File("D:\\Jdomcars.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();
      }
   }
}    

輸出視窗顯示檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<cars>
  <supercars company="Ferrari">
    <carname type="formula one">Ferrari 101</carname>
    <carname type="sports">Ferrari 202</carname>
  </supercars>
</cars>
廣告