最近开始接触J2ME项目,纯粹是自个儿瞎摸索。 恰巧碰到解析xml的问题,哈哈··在android项目中就已经为解析XML 大大的折腾了一番,如今在J2ME平台上应该要轻车熟路了吧。
J2ME 的medlit 中没有提供 关于dom、xml的包。只能单独的引进其他包。 经过一番思量饿测试,发觉kxml2不错,在此总结总结,也分享一下。
kxml2-min-2.3.0 下载地址:
kxml2-src-2.3.0.zip 下载地址:
mypoint.xml 内容如下:
- <longitude>116.41006longitude>
- <latitude>39.92718latitude>
TestXml.java 源代码如下:
- /**
- * 文件名:TestXml.java
- *
- * 版本信息:
- * 日期:2009-11-12
- * Copyright xxx Corporation 2009
- * 版权所有
- *
- */
- package com.xxx.util;
- import java.io.ByteArrayInputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import org.kxml2.io.KXmlParser;
- /**
- *
- * 项目名称:Basic7.0
- * 类名称:TestXml
- * 类描述:测试 xml 文件的读取类
- * 创建人:Defonds
- * 创建时间:2009-11-12 下午01:08:39
- * 修改人:Defonds
- * 修改时间:2009-11-12 下午01:08:39
- * 修改备注:
- * @version
- *
- */
- public class TestXml
- {
- private String longitude = "longitude";
- private String latitude = "latitude";
- private String key = null;
- /**
- * main(这里用一句话描述这个方法的作用)
- * TODO(这里描述这个方法适用条件 – 可选)
- * TODO(这里描述这个方法的执行流程 – 可选)
- * TODO(这里描述这个方法的使用方法 – 可选)
- * TODO(这里描述这个方法的注意事项 – 可选)
- * @param name
- * @param @return 设定文件
- * @return String DOM对象
- * @throws IOException
- * @Exception 异常对象
- * @since CodingExample Ver(编码范例查看) 1.1
- */
- public static void main(String[] args) throws IOException
- {
- TestXml test = new TestXml();
- String xml = test.getXml("mypoint.xml");
- test.parseXml(xml);
- }
- /**
- * 根据指定文件名返回文件内容
- * @throws IOException
- */
- private String getXml(String fileName) throws IOException
- {
- String str = null;
- InputStream is = getClass().getResourceAsStream(fileName);
- InputStream is2 = getClass().getResourceAsStream(fileName);
- DataInputStream dis = new DataInputStream(is);
- DataInputStream dis2 = new DataInputStream(is2);
- int xmlLength = 0;
- while(dis.read() >= 0)
- {
- xmlLength ++;
- }
- byte[] b = new byte[xmlLength];
- dis2.read(b);
- str = new String(b);
- return str;
- }
- /**
- * 解析xml
- */
- private void parseXml(String xml)
- {
- ByteArrayInputStream bytes = new ByteArrayInputStream(xml.getBytes());
- try
- {
- InputStreamReader reader = new InputStreamReader(bytes);
- KXmlParser parser = new KXmlParser();
- boolean keepParsing = true;
- parser.setInput(reader);
- while (keepParsing)
- {
- int type = parser.next();
- switch(type)
- {
- case KXmlParser.START_DOCUMENT:
- System.out.println("起始节点:" + parser.getName());
- break;
- case KXmlParser.START_TAG:
- startElement(parser);
- break;
- case KXmlParser.END_TAG:
- //endElement(parser);
- break;
- case KXmlParser.TEXT:
- characters(parser);
- break;
- case KXmlParser.END_DOCUMENT:
- keepParsing = false;
- break;
- }
- }
- } catch (Exception e){}
- }
- public void startElement(KXmlParser parser) throws Exception
- {
- String xmlName = parser.getName();
- //System.out.println("startElement : " + xmlName);
- this.key = xmlName;
- //System.out.println("当前key:" + key);
- }
- public void endElement(KXmlParser parser)
- {
- //String xmlName = parser.getName();
- //System.out.println("endElement : " + xmlName);
- }
- public void characters(KXmlParser parser)
- {
- String xmlText = parser.getText();
- System.out.println(key + "->" + xmlText);
- if (key.equals(longitude))
- {
- System.out.println(xmlText);
- }
- else if(key.equals(latitude))
- {
- System.out.println(xmlText);
- }
- this.key = null;
- }
- }