Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Java XML Processing
Search
Brian Hsu
January 08, 2013
Programming
0
69
Java XML Processing
Processing XML in Java with XOM library.
Brian Hsu
January 08, 2013
Tweet
Share
More Decks by Brian Hsu
See All by Brian Hsu
我如何停止憂慮並愛上 Non-MVC Web Framework @ OSDC.tw 2013
brianhsu
6
3.2k
數位典藏聯合目錄搜尋引擎模組
brianhsu
0
110
Java Unicode NCR 處理
brianhsu
1
320
如何在 Java App 中導入 Scala @ JavaTWO 2011
brianhsu
1
83
[LT] 自由軟體讓你五分鐘上新聞 @ OSDC.tw 2011
brianhsu
1
71
ScalaTest-連貓都會的單元測試與 BDD @ COSCUP 2010
brianhsu
0
150
Introduction to Scala @ TWJUG 2010/07
brianhsu
1
140
Programming Android Application in Scala @ OSDC.tw 2010
brianhsu
1
91
Other Decks in Programming
See All in Programming
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
330
try! Swift Tokyo 2024のLT枠に採択されたプロポーザルを出すときに考えていたこと
ski
0
340
Folding Cheat Sheet #2
philipschwarz
PRO
0
120
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
380
Elm Form Validation
bkuhlmann
0
510
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
350
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
350
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
750
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
6
860
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
110
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.3k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
Featured
See All Featured
The Language of Interfaces
destraynor
151
23k
The Invisible Side of Design
smashingmag
294
49k
Thoughts on Productivity
jonyablonski
57
3.8k
Six Lessons from altMBA
skipperchong
20
3k
Rails Girls Zürich Keynote
gr2m
91
13k
Reflections from 52 weeks, 52 projects
jeffersonlam
344
19k
RailsConf 2023
tenderlove
2
530
Designing the Hi-DPI Web
ddemaree
276
33k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
243
20k
Design by the Numbers
sachag
274
18k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
YesSQL, Process and Tooling at Scale
rocio
163
13k
Transcript
Java XML 處理 BrianHsu
[email protected]
聯合目錄的 XML • DACatalog 格式 • OAI 格式 • 藏品
ID 的轉換 – 每個藏品都有唯一的整數流水編號 (OID/objectID) – 轉成十六進位,前補零至八位數後兩個一組 • 1123021 = 0x1122cd => 0x001122cd • 00/11/22/cd.xml • http://catalog.digitalarchives.tw/item/00/11/22/cd.html
Java XML Library • XOM – 單一的 JAR 檔 –
API 較簡單 – 對 XML 格式的嚴格要求 • JDOM
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()
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());
修改 XML 檔案 • 讀入 XML 檔案後修改節點 – Element#appendChild –
Element#insertChild – Element#addAttribute – Element#removeChild – Element#replaceChild • 在讀入時直接修改 – NodeFactory – 參照 XMLModel 裡的 VCenterXMLMaker 類別和 XMLPreprocseeor.saveAsVCenterXMLFile()
複製檔案 • 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)
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 物件
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);