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
90
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Java XML Processing
Processing XML in Java with XOM library.
Brian Hsu
January 08, 2013
More Decks by Brian Hsu
See All by Brian Hsu
我如何停止憂慮並愛上 Non-MVC Web Framework @ OSDC.tw 2013
brianhsu
6
3.3k
數位典藏聯合目錄搜尋引擎模組
brianhsu
0
190
Java Unicode NCR 處理
brianhsu
1
430
如何在 Java App 中導入 Scala @ JavaTWO 2011
brianhsu
1
130
[LT] 自由軟體讓你五分鐘上新聞 @ OSDC.tw 2011
brianhsu
1
100
ScalaTest-連貓都會的單元測試與 BDD @ COSCUP 2010
brianhsu
0
290
Introduction to Scala @ TWJUG 2010/07
brianhsu
1
200
Programming Android Application in Scala @ OSDC.tw 2010
brianhsu
1
130
Other Decks in Programming
See All in Programming
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
1
410
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
690
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
990
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
470
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
Scaling GitHub
holman
464
140k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Deep Space Network (abreviated)
tonyrice
0
220
Are puppies a ranking factor?
jonoalderson
1
3.7k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
890
How to Talk to Developers About Accessibility
jct
2
280
Odyssey Design
rkendrick25
PRO
2
720
30 Presentation Tips
portentint
PRO
1
340
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
BBQ
matthewcrist
89
10k
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);