Java XML Processing

2377fa6c1b0f089b7e3229dfe2f6ae7f?s=47 Brian Hsu
January 08, 2013

Java XML Processing

Processing XML in Java with XOM library.

2377fa6c1b0f089b7e3229dfe2f6ae7f?s=128

Brian Hsu

January 08, 2013
Tweet

Transcript

  1. 2.

    聯合目錄的 XML • DACatalog 格式 • OAI 格式 • 藏品

    ID 的轉換 – 每個藏品都有唯一的整數流水編號 (OID/objectID) – 轉成十六進位,前補零至八位數後兩個一組 • 1123021 = 0x1122cd => 0x001122cd • 00/11/22/cd.xml • http://catalog.digitalarchives.tw/item/00/11/22/cd.html
  2. 3.

    Java XML Library • XOM – 單一的 JAR 檔 –

    API 較簡單 – 對 XML 格式的嚴格要求 • JDOM
  3. 4.

    XOM 讀取 XML 檔案 import java.io.File; import nu.xom.*; // Builder

    ==> 解析 / 修改 XML 用 Builder builder = new Builder(); Document document = builder.build(new File("test.xml")); // 讀 XML 檔案 Document document = builder.build("<root></root>", null); // 讀 XML 字串 Element root = document.getRootElement(); // XML 的根節點 // 取得子節點 root.getChildElements() root.getChildElements("AdminDesc") root.getFirstChildElements() root.getFirstChildElements("MetaDesc") // 取得屬性 root.getAttribute("name").getValue() // XPath Query root.query("/AdminDesc") // 只找下一層 root.query("//Title") // 找這一層以下的所有東西 // 看目前的節點下的所有東西 root.toXML()
  4. 5.

    XOM 寫入 XML 檔 import nu.xom; import java.io.FileOutputStream; import java.io.File;

    FileOutputStream outputFile = new FileOutputStream(new File("bbb.txt")); nu.xom.Serializer xmlFormatter = new nu.xom.Serializer(outputFile); // 寫成 UTF-8 nu.xom.Serializer xmlFormatter = new nu.xom.Serializer(outputFile, "Big5"); xmlFormatter.setIndent(2); // 縮排 xmlFormatter.write(xmlDocument.getDocument());
  5. 6.

    修改 XML 檔案 • 讀入 XML 檔案後修改節點 – Element#appendChild –

    Element#insertChild – Element#addAttribute – Element#removeChild – Element#replaceChild • 在讀入時直接修改 – NodeFactory – 參照 XMLModel 裡的 VCenterXMLMaker 類別和 XMLPreprocseeor.saveAsVCenterXMLFile()
  6. 7.

    複製檔案 • Apache CommonsIO – import org.apache.commons.io.FileUtils – static void

    copyFile(File srcFile, File destFile) – static void copyDirectory(File srcDir, File destDir) – static Collection<File> listFiles(File directory, String[] extensions, boolean recursive)
  7. 8.

    XMLModel • 確認專案目錄下有以下檔案 – src/main/resources/ProjectCatalogPrefix.txt – src/main/resources/SubjectCatalogPrefix.txt • XMLPreprocessor –

    Element loadXML(File file, boolean cleanup) – Element loadXML(String xml, boolean cleanup) – void saveAsBig5XMLFile(Element xmlDocument, File outputFile) • DACatalog – 可以吃 DACatalog/OAI 格式的 XML 並轉成 Java 物件
  8. 9.

    XMLModel import tw.digitalarchives.util.XMLPreprocessor; import tw.digitalarchives.model.DACatalog; import nu.xom.*; import java.io.File; Element

    xmlData = XMLPreprocessor.loadXML(File("test.xml")); DACatalog daCatalog = new DACatalog(xmlData);