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

J2ME 與 XML 集成實戰:採用 TinyXML 解析器

     編輯:J2ME

XML 在 J2ME 中的角色

XML 獨立於平台,純文本,創建工具同 HTML(記事本、XML Notepad、XML Spy 等)。J2ME 需輕量級 XML 解析器(佔用內存少)。

主流輕量解析器

  • KXML、MinXML、NanoXML、TinyXML(均可從網絡下載,JAR 包極小,如 TinyXML 僅 15KB)。

兩種解析模式

模式原理優點缺點
事件驅動 (SAX-like)逐元素解析,回調傳遞數據內存佔用極低無法隨機訪問,編程較繁瑣
樹模型 (DOM-like)整個文檔讀入內存樹結構導航操作快捷方便內存開銷大

實戰:樹模型解析器 TinyXML 完整範例

1. 準備

  • 下載 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>

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 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());
        }
    }
}

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!!!!!!
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved