KXML1.21(STABLE)解析XML数据范例(J2ME客户端)


 XML文件如下:


<?xml version="1.0">
<root>
<child1>childData1</child1>
<child2>childData2</child2>
</root >

使用String作为XML数据源

注意我使用的事1.21版本的,和2.0版本的使用方式是不一样的


package com.zeph.j2me.xml;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import org.kxml.Xml;
import org.kxml.parser.ParseEvent;
import org.kxml.parser.XmlParser;

public class KXMLMIDlet extends MIDlet {

	private Display display;

	private Form form;

	private TextField textfield1;

	private TextField textfield2;

	public KXMLMIDlet() {

		display = Display.getDisplay(this);

		form = new Form("KXML1.21(Stable)");

		textfield1 = new TextField("Data", "", 10, TextField.ANY);

		textfield2 = new TextField("Data", "", 10, TextField.ANY);

		form.append(textfield1);

		form.append(textfield2);
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

	}

	protected void pauseApp() {

	}

	protected void startApp() throws MIDletStateChangeException {

		display.setCurrent(form);

		xmlParse();

	}

	public void xmlParse() {

		String XML = "<?xml version=\"1.0\"?>" + "<root>" + "<child1>"
				+ "childData1" + "</child1>" + "<child2>" + "childData2"
				+ "</child2>" + "</root >";

		ByteArrayInputStream bis = new ByteArrayInputStream(XML.getBytes());

		InputStreamReader isr = new InputStreamReader(bis);

		XmlParser parser = null;

		try {

			parser = new XmlParser(isr);

		} catch (IOException e) {

			e.printStackTrace();

		}

		try {

			// 判断是否到达最后一个document标签
			boolean parsing = true;

			// 判断是否到达了我想要得到数据的Tag位置
			boolean isChildTag1 = false;

			// 判断是否到达了我想要得到数据的Tag位置
			boolean isChildTag2 = false;

			while (parsing) {

				ParseEvent event = parser.read();

				switch (event.getType()) {

				case Xml.START_DOCUMENT:

					System.out.println("start document");

					break;

				case Xml.START_TAG:

					System.out.println("start tag:" + event.getName());

					if (event.getName().equals("child1"))

						isChildTag1 = true;

					if (event.getName().equals("child2"))

						isChildTag2 = true;

					break;

				case Xml.TEXT:

					System.out.println("tag data:" + event.getText());

					if (isChildTag1)

						textfield1.setString(event.getText());

					if (isChildTag2)

						textfield2.setString(event.getText());

					break;

				case Xml.END_TAG:

					System.out.println("end tag:" + event.getName());

					if (event.getName().equals("child1"))

						isChildTag1 = false;
					
					if (event.getName().equals("child2"))

						isChildTag2 = false;

					break;

				case Xml.END_DOCUMENT:

					System.out.println("end document");

					parsing = false;

					break;

				}

			}

		} catch (IOException e) {

			e.printStackTrace();

		}

		parser = null;

		try {

			isr.close();

			bis.close();

		} catch (IOException e) {

			e.printStackTrace();

		}

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值