首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDOM 實戰指南:以 Java 為中心的輕量級 XML 處理 API 完整教學

     編輯:Java 相關知識

Java 與 XML 結合已成主流,但標準 API(DOM、SAX、JAXP)或因語言中立導致 Java 使用繁瑣、或因介面驅動增加工廠模式複雜度。JDOM 由 Brett McLaughlin 與 Jason Hunter 創建,專為 Java 設計:使用原生 String、Collections API、類驅動而非介面驅動、無 Node 階層強制轉型。它不取代解析器,建立在現有 API 之上,提供「更好的捕鼠器」。

建立與操作 JDOM 文件:直觀的 Java 風格

以汽車 XML 為例:

<?xml version="1.0" encoding="UTF-8"?>
<car vin="123fhg5869705iop90">
  <!--Description of a car-->
  <make>Toyota</make>
  <model>Celica</model>
  <year>1997</year>
  <color>green</color>
  <license state="CA">1ABC234</license>
</car>

建立 Document 與根元素

Element carElement = new Element("car");
Document myDocument = new Document(carElement);

XML 單一根元素要求,故 Document 建構子接收根 Element。

新增屬性與子元素

carElement.addAttribute(new Attribute("vin", "123fhg5869705iop90"));
carElement.addContent(new Element("make").addContent("Toyota"));
carElement.addContent(new Element("model").addContent("Celica"));
carElement.addContent(new Element("year").addContent("1997"));
carElement.addContent(new Element("color").addContent("green"));
carElement.addContent(new Element("license").addContent("1ABC234").addAttribute("state", "CA"));
carElement.addContent(new Comment("Description of a car"));

addContent 回傳 Element 本身,支援鏈式寫法。Comment、CDATA 等標準 XML 型別同理。

存取與移除子元素

Element yearElement = carElement.getChild("year");  // 回傳 Element,無需轉型
boolean removed = carElement.removeChild("year");   // 僅移除該元素

輸出 XML

XMLOutputter outputter = new XMLOutputter("  ", true);  // 兩空格縮排、換行
outputter.output(myDocument, System.out);               // 輸出至 Writer/OutputStream
// 檔案輸出
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();

互操作性:與現有 XML 生態無縫銜接

JDOM 可輸出為 SAX 事件流、DOM Document、字串,亦可從 SAXBuilder/DOMBuilder 讀取現有 XML。這使 JDOM 能融入既有系統,或搭配僅支援特定模型的工具(如 Xalan XSLT)。

搭配 Xalan 產出 HTML 頁面

TransformerFactory tFactory = TransformerFactory.newInstance();
DOMOutputter domOutputter = new DOMOutputter();
org.w3c.dom.Document domDocument = domOutputter.output(myDocument);
Source xmlSource = new DOMSource(domDocument);
StreamSource xsltSource = new StreamSource(new FileInputStream("/some/directory/car.xsl"));
StreamResult xmlResult = new StreamResult(response.getOutputStream());
Transformer transformer = tFactory.newTransformer(xsltSource);
transformer.transform(xmlSource, xmlResult);

同樣輸出可透過 XMLOutputter 產生字串後轉 StreamSource 達成。JDOM 的多模型輸出能力(String、SAX、DOM)極大擴展了工具鏈相容性。

解析現有 XML 檔案

SAXBuilder builder = new SAXBuilder();
Document anotherDocument = builder.build(new File("/some/directory/sample.xml"));

解析後的 Document 可用前述方式操作。contrib 套件更提供 JDBC ResultSet 建構器、XPath 實作等擴展。

現狀與展望

文章撰寫時 JDOM 處於 Beta 6,API 大多穩定,部分語義仍可能調整。核心重心在穩定 API、效能評估、支援 DTD 實體、XPath 核心整合與更多資料源整合。對於「用 Java 思維寫 XML」的開發者,JDOM 提供最平滑的學習曲線與最高開發效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved