首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2ME 與 XML 整合開發指南:使用 TinyXML 解析器實作

     編輯:Java 相關知識

前言

XML(Extensible Markup Language)作為獨立於硬體與軟體的標記語言,廣泛應用於資料交換與儲存。在 J2ME 行動裝置開發中,若需讀取 XML 檔案,必須引入適合行動裝置的輕量級 XML 解析器。本文將介紹主流的 J2ME XML 解析器、兩種解析模式的差異,並以 TinyXML 為例,完整示範如何在 MIDlet 中讀取並解析遠端 XML 資料。

一、適用於行動裝置的 XML 解析器

受限於行動裝置記憶體與運算資源,J2ME 專用的 XML 解析器特點是佔用記憶體極小。常見的開源解析器包括:

  • KXML
  • MinXML
  • NanoXML
  • TinyXML(本文實作範例使用)

這些解析器皆為 JAR 封裝的 Java 類別庫,需從網路下載後加入專案的 lib 目錄。

二、XML 解析的兩種核心模式

1. 事件驅動模式

逐一解析 XML 元素,透過回呼方法將解析結果傳遞給 MIDlet。優點是記憶體佔用極低,適合大型 XML;缺點是無法隨機存取節點,程式邏輯較複雜。

2. 樹狀結構模式

一次性將整份 XML 讀入記憶體並建立樹狀結構。優點是導航與操作資料極為方便、速度快;缺點是記憶體開銷大,不適合超大型 XML 檔案。

三、實作範例:使用 TinyXML 解析遠端 XML

1. 環境準備

  • 下載 TinyXML.jar(約 15KB)並放置於 X:\WTK104\apps\ProjectName\lib。
  • 準備 XML 檔案 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>

2. MIDlet 完整程式碼

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 myDisplay;
    private Form mainScreen;
    private TextField requestField;
    private Command sendCommand = new Command("SEND", Command.OK, 1);

    public tinyTreeDemo() {
        myDisplay = Display.getDisplay(this);
        mainScreen = new Form("Type a URL:");
        requestField = new TextField(null, url, 100, TextField.URL);
        mainScreen.append(requestField);
        mainScreen.addCommand(sendCommand);
        mainScreen.setCommandListener(this);
    }

    public void startApp() throws MIDletStateChangeException {
        myDisplay.setCurrent(mainScreen);
    }

    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command c, Displayable s) {
        if (c == sendCommand) {
            try {
                root = TinyParser.parseXML(url);
                displayNode(root);
            } catch (ParseException e) {
                System.err.println("parseXML: " + e);
            }
        }
    }

    private void displayNode(ParsedXML px) {
        String nodeName = px.getTypeName();
        if (px.getName() != null) nodeName += "<" + px.getName() + ">";
        String nodeContent = px.getContent() != null ? px.getContent() : "";
        System.out.println(nodeName + ":");
        System.out.println(nodeContent);

        Enumeration attrs = px.attributes();
        if (attrs.hasMoreElements()) {
            System.out.print("attribute:");
            while (attrs.hasMoreElements()) {
                String attrName = (String) attrs.nextElement();
                System.out.println(attrName + ": " + px.getAttribute(attrName));
            }
        }

        Enumeration elems = px.elements();
        if (elems.hasMoreElements()) {
            while (elems.hasMoreElements()) {
                displayNode((ParsedXML) elems.nextElement());
            }
        }
    }
}

3. 編譯與測試

啟動 J2EE 伺服器後執行專案,主控台將輸出解析結果:

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!!!!!!

結語

透過 TinyXML 這類輕量解析器,J2ME 應用程式能高效整合 XML 資料,滿足行動裝置與伺服器端的資料交換需求。開發者可根據專案資料量與複雜度,選擇事件驅動或樹狀模式,平衡記憶體使用與開發便利性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved