XML 獨立於平台、純文本格式,適合行動裝置與伺服器交換結構化資料。J2ME 需輕量級解析器(記憶體佔用極小),常見選擇:KXML、MinXML、NanoXML、TinyXML(本文採用 TinyXML,~15KB)。
TinyXML.jar 放入專案 lib/ 目錄。mail.xml 部署於 J2EE 伺服器 public_html/:<?xml version="1.0"?>
<mail>
<From>Developer</From>
<To>Students</To>
<Cc>Faculty</Cc>
<Date>30</Date>
<Subject>Integration</Subject>
<Body Language="English">This is J2ME!!!!!!</Body>
</mail>
tinyTreeDemo.java:import gd.xml.*; import gd.xml.tiny.*;
public class tinyTreeDemo extends MIDlet implements CommandListener {
private String url = "https://127.0.0.1:8000/mail.xml";
private ParsedXML root;
// ... UI 初始化略
public void commandAction(Command c, Displayable s) {
if (c == sendCommand) {
try {
root = TinyParser.parseXML(url); // 取得根節點
displayNode(root); // 遞迴列印
} catch (ParseException e) { e.printStackTrace(); }
}
}
private void displayNode(ParsedXML px) {
String nodeName = px.getTypeName();
if (px.getName() != null) nodeName += "<" + px.getName() + ">";
String content = px.getContent() != null ? px.getContent() : "";
System.out.println(nodeName + ":"); System.out.println(content);
// 屬性列印
Enumeration attrs = px.attributes();
if (attrs.hasMoreElements()) {
System.out.print("attribute:");
while (attrs.hasMoreElements()) {
String name = (String) attrs.nextElement();
System.out.println(name + ":" + px.getAttribute(name));
}
}
// 子元素遞迴
Enumeration elems = px.elements();
if (elems.hasMoreElements()) {
while (elems.hasMoreElements())
displayNode((ParsedXML) elems.nextElement());
}
}
}
root: tag<mail>: tag<From>: text: Developer tag<To>: text: Students tag<Cc>: text: Faculty tag<Date>: text: 30 tag<Subject>: text: Integration tag<Body>: attribute: Language:English text: This is J2ME!!!!!!
展示了樹形解析器對節點類型、名稱、內容、屬性與子元素的完整遍歷能力。