new Element()、setContent()、getChild() 符合 Java 習慣官網:jdom.org
| 類 | 包 | 職責 |
|---|---|---|
Document | org.jdom | 文檔根,持有根元素 |
Element | org.jdom | 元素節點,屬性/子元素/文本 |
SAXBuilder | org.jdom.input | SAX 解析器,構建 Document |
XMLOutputter | org.jdom.output | Document 輸出,支持格式化 |
Format | org.jdom.output | 輸出格式:getPrettyFormat()、getCompactFormat() |
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.*;
public class DOMCreator {
public static void main(String[] args) throws Exception {
// 1. 創建文檔結構
Document doc = new Document(new Element("Table"));
Element row = new Element("Row");
Element item = new Element("Item");
item.setText("data");
row.setContent(item);
doc.getRootElement().setContent(row);
// 2. 格式化寫入文件
Format format = Format.getPrettyFormat();
XMLOutputter outputter = new XMLOutputter(format);
outputter.output(doc, new FileWriter("sample.xml"));
// 3. 讀取並輸出到控制台
SAXBuilder builder = new SAXBuilder();
Document loaded = builder.build(new File("sample.xml"));
new XMLOutputter().output(loaded, System.out);
}
}
| 操作 | JDOM | DOM4J |
|---|---|---|
| 創建文檔 | new Document(rootElement) | DocumentHelper.createDocument() + addElement() |
| 創建元素 | new Element(name) | parent.addElement(name) (工廠模式) |
| 設置文本 | element.setText(text) | element.addText(text) |
| 設置子內容 | parent.setContent(child) | parent.add(child) / parent.addElement() |
| 獲取根元素 | doc.getRootElement() | 同 |
| 格式化輸出 | Format.getPrettyFormat() | OutputFormat.createPrettyPrint() |
| XPath 支持 | 需額外 jdom-xpath 模塊 | 原生內建 selectNodes() |
public interface Constants {
String DATA_TABLE = "Table";
String DATA_ROW = "Row";
String DATA_ITEM = "Item";
}
Element user = new Element("User");
user.setAttribute("id", "123");
user.setAttribute(new Attribute("status", "active"));
String id = user.getAttributeValue("id");
// Java 5+ 泛型
for (Element child : (List) parent.getChildren()) { ... }
// 獲取特定名稱子元素
Element row = parent.getChild("Row"); // 第一個
List rows = parent.getChildren("Row"); // 所有
Namespace ns = Namespace.getNamespace("ns", "https://example.com");
Element elem = new Element("Element", ns);
doc.getRootElement().addContent(elem);
jaxen + jdom-xpath,版本兼容性差// JDOM 讀取
Document doc = new SAXBuilder().build(file);
// DOM4J 讀取 (API 極其相似)
Document doc = new SAXReader().read(file);
// StAX 讀取 (流式、低內存)
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader reader = factory.createXMLEventReader(new FileInputStream(file));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
// 事件驅動處理
}
JDOM 以 **純 Java、API 直觀** 降低 XML 入門門檻,但 **大文件性能缺陷、XPath 非原生、生態停滯** 限制其在生產環境應用。理解其核心 API (Document/Element/SAXBuilder/XMLOutputter) 有助於維護存量代碼,新項目**強烈建議**選擇 **DOM4J (XPath 密集)**、**StAX (高性能流式)** 或 **JAXB (對象綁定)**。