J2ME中使用KXML的例子

本文介绍了一种轻量级的XML解析库KXML,适用于资源受限的嵌入式设备。通过示例代码展示了如何使用KXML进行XML文件的读取与解析。

普通的JAVA XML解析包比较大,占用资源比较多,不适合嵌入式设备使用
KXML是专门用在嵌入式设备上,只有十几K
下面是我在实际项目中用到的一代码,供大家参考
 public String XmlDecoding(DataInputStream din) throws IOException{
  String temp = null;
  Reader reader = new InputStreamReader(din);
  XmlParser parser = new XmlParser(reader);
  ParseEvent pe = null;
  parser.read(Xml.START_TAG, null, "upos");
  parser.skip();
  ParseEvent event = null;
  do {
   try {
    event = parser.read ();

    if(event.getType()==Xml.START_TAG) {
     String name = event.getName();
     temp += "<"+name + ">/n";
    }

    if(event.getType()== Xml.TEXT) {
     String name = event.getText();
     name = name.trim();
     temp += name + "/n";
    }

    if(event.getType()== Xml.END_TAG) {
     String name = event.getName();
     temp += "<"+name + ">/n";
    }

   }
   catch(IOException ex) {       
    System.out.println("Exception occured");
   }
  }
  while (event.getType() != Xml.END_DOCUMENT);
  return temp;
 }

一段如何使用kxml的代码- -

                                      

 

到处找kxml的代码,没找到,刚巧看到《Crack J2ME》里面有一段,非常完整,贴下来供同道参考吧。关于详细的解释,可以参加这一篇文章



XMLCaseStudy


/**
 *  Basic packages used by various classes..
 *
 */
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Enumeration;
import com.sun.kjava.*;
import java.lang.*;
import javax.microedition.io.*;
import java.io.*;
/**
 *  Packages used by the XML parser...
 *
 */
import org.kxml.*;
import org.kxml.io.*;
import org.kxml.parser.*;

/**
 *  Declaring a class XmlCaseStudy. This class is responsible for
 *  reading the file  and pasing it.Then it displays a screen which
 *    contains the parse results.
 */
public class XmlCaseStudy extends Spotlet
{

/**
 *   declaring the variables used by the parser..
 *
 */
AbstractXmlParser xmlparser;
ParseEvent event;
DataInputStream din;
String result_string = "";
/**
 *  Declaring the GUI components
 *
 */

private Button bt = new Button("Ok",70,145);        // Gui Components (Button)
private Button exit = new Button("Exit",35,145);   // Gui Components (Button)

/**
 *  main Class which calls the Class XmlCaseStudy.
 *
 */
      public static void main(String args[])throws Exception
      {
        XmlCaseStudy casestudy = new XmlCaseStudy();
      }   


        public XmlCaseStudy()
          {
/**
 *  Getting the Graphics and redrawing the screen.
 *
 */ 
            Graphics graphics = Graphics.getGraphics();
            graphics.resetDrawRegion();
            graphics.clearScreen();   
/**
 *  Painting the title on the screen., 
 *
 */
            graphics.drawString("XML case Study..",25,10);
            graphics.drawString("Press OK to fetch XML file and Parse it",5,40);
/**
 *  Registering the Spotlet and painting the GUI components. 
 *
 */
            register(NO_EVENT_OPTIONS);
            bt.paint();
            exit.paint();
                 
          }
         

            public void penDown(int x, int y)   
            {
/**
 *  When Ok is pressed unregister the spotlet, call the startReading
 *  class to read the XML file then call the XML parser which will
 *    parse the file and store the results in a string which is passed
 *    as a parameter to another class which displays the result.
 */
                if(bt.pressed(x,y))
                 {
                    unregister();
                    startReading();
                    parseData();
                       new result_screen(result_string);
                 }
                 else
/**
 *  Exit the program
 *
 */
                  {
                    System.exit(0);
                  }
            }

        public void startReading()
        {
          try
          {
/**
 *  Read the file and pass to the XML parser..
 *
 */
             din = Connector.openDataInputStream("testhttp://pankaj/books.xml");

             xmlparser = new XmlParser(new InputStreamReader(din));
          }
          catch(IOException e)
          {
          System.out.println("Exception Occurred while reading");
          }
        }

        void parseData()
         {
          do
          {
           try
           {
                event = xmlparser.read ();
/**
 *  Start Tag is encountered.. and Appended to a string.
 *
 */
                if(event.getType()==Xml.START_TAG)
                {
                    StartTag stag = (StartTag)event;
                     String name = stag.getName();
                    result_string = result_string + "Start "+name + "/n";
                }
/**
 *  text between tags is encountered and appended to the String.
 *
 */
                if(event.getType()== Xml.TEXT)
                {
                    TextEvent tevent = (TextEvent)event;
                    String name = tevent.getText();
                    name = name.trim();
                    result_string = result_string +"Value  "+name + "/n";
                }
/**
 *  End Tag is encountered.. and Appended to a string.
 *
 */

                if(event.getType()== Xml.END_TAG)
                {
                    EndTag end_tag = (EndTag)event;
                    String name = end_tag.getName();
                    result_string = result_string + "End  "+name + "/n";
                }

           }
           catch(IOException ex)
           {       
                System.out.println("Exception occured");
           }
        }
        while (!(event instanceof EndDocument));
        System.out.println("**** END OF DOCUMENT ****"); // End od document is reached.
     }
}     

这一段是result_screen.java
/**
 *  Basic packages used by various classes..
 *
 */
import com.sun.kjava.*;

/**
 *  Decalaring a class result_screen which is responsible for
 *  showing the results in the ScrollTextBox
 */
public class result_screen extends Spotlet
{

/**
 *  Declaring the GUI components
 *
 */

    Button exit = new Button("Exit", 80,145);
    ScrollTextBox result_box;

    result_screen(String result)
    {
/**
 *  Getting the Graphics and redrawing the screen.
 *
 */         
        Graphics graphics = Graphics.getGraphics();
        graphics.resetDrawRegion();
        graphics.clearScreen();   
   
/**
 *  Painting the title on the screen., 
 *
 */
        graphics.drawString("Result of parsing",25,2);
/**
 *  Registering the Spotlet and painting the GUI components. 
 *
 */
        result_box = new ScrollTextBox(result,10,20,120,120);
        exit.paint();
        result_box.paint();
        register(NO_EVENT_OPTIONS);
    }

    public void penDown(int x, int y)
    {
/**
 *  Exit the program
 *
 */
        if (exit.pressed(x,y))
        {
            System.exit(0);
        }
        else if (result_box.contains(x,y))
        result_box.handlePenMove(x,y);
    }


    public void penMove(int x, int y)
    {
         if (result_box.contains(x,y))
         result_box.handlePenMove(x,y);
    }
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值