j2me中kxml解析xml实例

本文分享了一个使用KXML解析XML文件的通用示例代码,该代码能够从指定URL读取XML数据,并通过解析XML来获取系统铃音类型名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本人研究编写kxml解析xml代码做了两天,虽然实现功能,但解析方法不具有通用性,在网友小俞的帮助下,实现一个通用的解析代码,非常感谢小俞~~~~!
  1. import java.io.IOException;
  2. import java.io.InputStreamReader;
  3. import java.util.Vector;
  4. import javax.microedition.io.Connector;
  5. import javax.microedition.io.HttpConnection;
  6. import javax.microedition.lcdui.Command;
  7. import javax.microedition.lcdui.CommandListener;
  8. import javax.microedition.lcdui.Display;
  9. import javax.microedition.lcdui.Displayable;
  10. import javax.microedition.lcdui.List;
  11. import javax.microedition.lcdui.TextField;
  12. import org.kxml2.io.KXmlParser;
  13. import org.xmlpull.v1.XmlPullParser;
  14. import org.xmlpull.v1.XmlPullParserException;
  15. import com.sinic.main.FrmMain;
  16. public class GetRingTypeForm extends List implements CommandListener{
  17. static final String url = "http://localhost/SMSCALLWebService/2.xml";      //2.xml下篇写
  18.     static final String title = "获取系统铃音" ;
  19.     Vector des = new Vector();
  20. private Display display = null;
  21. private Displayable parent = null;
  22. private FrmMain fm = null;
  23. private Thread t;
  24. private String result;
  25. private final static Command CMD_BACK = new Command("返回", Command.SCREEN, 1);
  26. private final static Command CMD_OK = new Command("确定", Command.SCREEN, 1);
  27.   
  28. public GetRingTypeForm() {//FrmMain d, Displayable p
  29.    super(title,List.EXCLUSIVE);
  30.    addCommand(CMD_OK);
  31.    addCommand(CMD_BACK);
  32.    setCommandListener(this);
  33.    new ReadThread().start();
  34. }
  35. public void commandAction(Command arg0, Displayable arg1) {
  36.    if (arg0 == CMD_BACK) {
  37.     fm.display.setCurrent(parent);
  38.    } else if (arg0 == CMD_OK) {
  39.    }
  40. }
  41.     class ReadThread extends Thread
  42.     {
  43.    public void run()
  44.    {
  45.     try
  46.     {
  47.      HttpConnection hc =(HttpConnection)Connector.open(url);
  48.     
  49.      KXmlParser parser = new KXmlParser();
  50.      parser.setInput(new InputStreamReader(hc.openInputStream()));
  51.      readStory(parser);
  52.    
  53.     }
  54.     catch(Exception e)
  55.     {
  56.      e.printStackTrace();
  57.      des.addElement(e.toString());
  58.     }
  59.    }
  60.     }
  61.     void readStory(KXmlParser parser) throws IOException, XmlPullParserException
  62.     {
  63.     String s=null;
  64.         String responseCode=null;
  65.    try
  66.             // 获取事件类型
  67.     parser.nextTag();
  68.             int eventType = parser.getEventType();
  69.             // 如果不是整个文档的结尾,那么就读取,这样子就达到遍历整个文档的目的
  70.             while (eventType != XmlPullParser.END_DOCUMENT) {
  71.                 // 访问文档根节点
  72.                 if (eventType == XmlPullParser.START_DOCUMENT) {
  73.                 parser.nextTag();
  74.                 } else if (eventType == XmlPullParser.START_TAG) { 
  75.                 s = parser.getName();
  76.                 System.out.println("解析到"+s+"字段");
  77.                 //此处可以对各个标签的属性进行操作
  78.                for(int i = 0; i<parser.getAttributeCount();i++){
  79.                 System.out.println(s+"字段"+"属性:"+parser.getAttributeName(i)+"的值为:"+parser.getAttributeValue(i));
  80.                }
  81.                 } else if (eventType == XmlPullParser.TEXT) {
  82.                 responseCode=parser.getText();
  83.                System.out.println("解析字段 "+s+"值为:"+responseCode);
  84.                    
  85.                   if(s.equals("VOX_TYPE")){
  86.                    responseCode=parser.getText();
  87.                    System.out.println("解析字段 data="+responseCode);
  88.                 }
  89.                 if(s.equals("VOX_TYPE_NAME")){
  90.                    responseCode=parser.getText();
  91.                    if(responseCode.length()!=0){
  92.                     this.append(responseCode, null);//往list里加值
  93.                    }
  94.                    System.out.println("解析字段 data="+responseCode);
  95.                 }            
  96.                 } else if (eventType == XmlPullParser.END_TAG) {
  97.                 
  98.                     System.out.println("结束"+s+"字段解析");
  99.                     responseCode = "";
  100.                     s = "";
  101.                     
  102.                 }
  103.             eventType = parser.next();
  104.             }
  105.         } catch (Exception e){
  106.                 e.printStackTrace();
  107.         } 
  108.     }
  109. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值