JDom 是以 Java 為中心優化的 XML API,由 Jason Hunter 與 Brett McLaughlin 開發,追求直觀、簡單、高效。它吸收 DOM 與 SAX 優點,提供輕量級、記憶體友善的操作模型,支援隨機存取與修改,並能與現有 SAX/DOM 系統互通。
element.getText() 即可,無需 getFirstChild().getValue() 繞彎。// 從頭建構
Document doc = new Document(new Element("rootElement"));
// 從既有來源建構(推薦 SAXBuilder)
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(url); // 亦可用 File、InputStream 等
SAXBuilder 速度快(接近 SAX),DOMBuilder 則可從既有 DOM 物件轉換,利於整合舊系統。
XMLOutputter outputter = new XMLOutputter(); // 可自訂縮排、換行、編碼
outputter.output(doc, System.out);
亦可用 SAXOutputter 產生 SAX 事件、DOMOutputter 產生 DOM 文件,便於與其他工具串接。
DocType docType = doc.getDocType();
System.out.println("Element: " + docType.getElementName());
System.out.println("Public ID: " + docType.getPublicID());
System.out.println("System ID: " + docType.getSystemID());
Element root = doc.getRootElement();
// 取得所有直接子元素
List allChildren = root.getChildren();
// 依名稱取得子元素列表
List named = root.getChildren("name");
// 取得第一個同名子元素
Element kid = root.getChild("name");
已知結構時可鏈式導航:root.getChild("gui").getChild("window-manager").getChild("name").getText()。注意防禦 NullPointerException。
String width = table.getAttributeValue("width");
Attribute attr = table.getAttribute("width");
int border = table.getAttribute("border").getIntValue(); // 自動轉型
屬性不存在時 getAttribute 回傳 null,轉型失敗拋出 DataConversionException。
元素可能包含文字、註解、子元素、處理指令。getText() 僅取文字;getMixedContent() 回傳含各類節點的 List,配合 instanceof 判斷類型處理。