Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Java XML Processing
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Brian Hsu
January 08, 2013
Programming
92
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
210
Java Unicode NCR 處理
brianhsu
1
440
如何在 Java App 中導入 Scala @ JavaTWO 2011
brianhsu
1
140
[LT] 自由軟體讓你五分鐘上新聞 @ OSDC.tw 2011
brianhsu
1
110
ScalaTest-連貓都會的單元測試與 BDD @ COSCUP 2010
brianhsu
0
300
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
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
4
320
Java 27新機能 / Java 27 new features
kishida
2
180
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
510
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
570
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.5k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
19k
mrbgem 三角測量 開発
ogom
0
140
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
400
setup-vp GitLab対応の裏側
naokihaba
0
140
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
A Soul's Torment
seathinner
8
3.7k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
890
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Odyssey Design
rkendrick25
PRO
2
840
Navigating Weather and Climate Data
rabernat
0
540
Thoughts on Productivity
jonyablonski
76
5.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Chasing Engaging Ingredients in Design
codingconduct
0
340
How to build a perfect <img>
jonoalderson
1
6k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
390
Between Models and Reality
mayunak
4
470
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);