如何在MIDlet程序中解析XML

本文介绍了一个使用JSR172规范中的Java API进行XML文件解析的例子。通过继承DefaultHandler类并实现特定的方法,可以处理XML文档中的元素、属性及文本内容。示例代码展示了如何初始化SAXParser并解析指定的XML文件。

JSR 172实现了Java API来进行XML解析.

下边代码说明了如何解析一个XML文件

import java.io.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.lcdui.*;

public class XMLMidlet extends MIDlet
{
  public XMLMidlet() {}

  protected void startApp()
  {
    try
    {
      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();

      FileConnection fc = (FileConnection) Connector.open(
        "file:///root1/helloworld.xml");
      InputStream is = fc.openInputStream();
      InputSource inputSource = new InputSource(is);
      saxParser.parse(is,new xmlHandler(this));
    }
    catch(Exception ex) {}
  }

  protected void alert(String msg)
  {
    Display display = Display.getDisplay(this);
    Form form = new Form("HelloWorld XML !");
    form.append(msg);
    display.setCurrent(form);
  }

  protected void pauseApp() {}
  protected void destroyApp(boolean bool) {}
}

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import java.util.*;


class xmlHandler extends DefaultHandler
{
  private XMLMidlet midlet;
  private Vector nodes = new Vector();
  private Stack tagStack = new Stack();

  public xmlHandler (XMLMidlet midlet)
  {
    this.midlet = midlet;
  }

  public void startDocument() throws SAXException {}

  public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException
  {
    if(qName.equals("node1"))
    {
      Noden node = new Noden();
      nodes.addElement(node);
    }
    tagStack.push(qName);
  }

  public void characters(char[] ch, int start, int length) throws SAXException
  {
    String chars = new String(ch, start, length).trim();

    if(chars.length() > 0)
    {
      String qName = (String)tagStack.peek();
      Noden currentnode = (Noden)nodes.lastElement();

      if (qName.equals("name"))
      {
        currentnode.setName(chars);
      }
      else if(qName.equals("type"))
      {
        currentnode.setType(chars);
      }
    }
  }

  public void endElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException
  {
    tagStack.pop();
  }

  public void endDocument() throws SAXException
  {
    StringBuffer result = new StringBuffer();
    for (int i=0; i<nodes.size(); i++)
    {
      Noden currentnode = (Noden)nodes.elementAt(i);
      result.append("Name : "currentnode.getName() + " Type : " +
        currentnode.getType() + "/n");
    }
    midlet.alert(result.toString());
  }


  class Noden
  {
    private String name;
    private String type;

    public Noden()
    {}

    public void setName(String name)
    {
      this.name = name;
    }

    public void setType(String type)
    {
      this.type = type;
    }

    public String getName()
    {
      return name;
    }

    public String getType()
    {
      return type;
    }
  };

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值