XML 獨立於平台,純文本,創建工具同 HTML(記事本、XML Notepad、XML Spy 等)。J2ME 需輕量級 XML 解析器(佔用內存少)。
| 模式 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| 事件驅動 (SAX-like) | 逐元素解析,回調傳遞數據 | 內存佔用極低 | 無法隨機訪問,編程較繁瑣 |
| 樹模型 (DOM-like) | 整個文檔讀入內存樹結構 | 導航操作快捷方便 | 內存開銷大 |
TinyXML.jar 放入 WTK/apps/ProjectName/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>
import java.io.*; import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
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;
private Display display; private Form mainScreen;
private TextField requestField;
private Command sendCmd = new Command("SEND", Command.OK, 1);
public TinyTreeDemo() {
display = Display.getDisplay(this);
mainScreen = new Form("Type a URL:");
requestField = new TextField(null, url, 100, TextField.URL);
mainScreen.append(requestField);
mainScreen.addCommand(sendCmd);
mainScreen.setCommandListener(this);
}
protected void startApp() { display.setCurrent(mainScreen); }
protected void pauseApp() {}
protected void destroyApp(boolean u) {}
public void commandAction(Command c, Displayable s) {
if (c == sendCmd) {
try {
root = TinyParser.parseXML(requestField.getString());
displayNode(root);
} catch (ParseException e) { System.err.println("parse: "+e); }
}
}
private void displayNode(ParsedXML px) {
String name = px.getTypeName();
if (px.getName() != null) name += "<" + px.getName() + ">";
String content = px.getContent() != null ? px.getContent() : "";
System.out.println(name + ":");
System.out.println(content);
Enumeration attrs = px.attributes();
if (attrs.hasMoreElements()) {
System.out.print("attribute:");
while (attrs.hasMoreElements()) {
String an = (String)attrs.nextElement();
System.out.println(an + ":" + px.getAttribute(an));
}
}
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!!!!!!