本人研究编写kxml解析xml代码做了两天,虽然实现功能,但解析方法不具有通用性,在网友小俞的帮助下,实现一个通用的解析代码,非常感谢小俞~~~~!
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.Vector;
- import javax.microedition.io.Connector;
- import javax.microedition.io.HttpConnection;
- import javax.microedition.lcdui.Command;
- import javax.microedition.lcdui.CommandListener;
- import javax.microedition.lcdui.Display;
- import javax.microedition.lcdui.Displayable;
- import javax.microedition.lcdui.List;
- import javax.microedition.lcdui.TextField;
- import org.kxml2.io.KXmlParser;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import com.sinic.main.FrmMain;
- public class GetRingTypeForm extends List implements CommandListener{
- static final String url = "http://localhost/SMSCALLWebService/2.xml"; //2.xml下篇写
- static final String title = "获取系统铃音" ;
- Vector des = new Vector();
- private Display display = null;
- private Displayable parent = null;
- private FrmMain fm = null;
- private Thread t;
- private String result;
- private final static Command CMD_BACK = new Command("返回", Command.SCREEN, 1);
- private final static Command CMD_OK = new Command("确定", Command.SCREEN, 1);
- public GetRingTypeForm() {//FrmMain d, Displayable p
- super(title,List.EXCLUSIVE);
- addCommand(CMD_OK);
- addCommand(CMD_BACK);
- setCommandListener(this);
- new ReadThread().start();
- }
- public void commandAction(Command arg0, Displayable arg1) {
- if (arg0 == CMD_BACK) {
- fm.display.setCurrent(parent);
- } else if (arg0 == CMD_OK) {
- }
- }
- class ReadThread extends Thread
- {
- public void run()
- {
- try
- {
- HttpConnection hc =(HttpConnection)Connector.open(url);
- KXmlParser parser = new KXmlParser();
- parser.setInput(new InputStreamReader(hc.openInputStream()));
- readStory(parser);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- des.addElement(e.toString());
- }
- }
- }
- void readStory(KXmlParser parser) throws IOException, XmlPullParserException
- {
- String s=null;
- String responseCode=null;
- try{
- // 获取事件类型
- parser.nextTag();
- int eventType = parser.getEventType();
- // 如果不是整个文档的结尾,那么就读取,这样子就达到遍历整个文档的目的
- while (eventType != XmlPullParser.END_DOCUMENT) {
- // 访问文档根节点
- if (eventType == XmlPullParser.START_DOCUMENT) {
- parser.nextTag();
- } else if (eventType == XmlPullParser.START_TAG) {
- s = parser.getName();
- System.out.println("解析到"+s+"字段");
- //此处可以对各个标签的属性进行操作
- for(int i = 0; i<parser.getAttributeCount();i++){
- System.out.println(s+"字段"+"属性:"+parser.getAttributeName(i)+"的值为:"+parser.getAttributeValue(i));
- }
- } else if (eventType == XmlPullParser.TEXT) {
- responseCode=parser.getText();
- System.out.println("解析字段 "+s+"值为:"+responseCode);
- if(s.equals("VOX_TYPE")){
- responseCode=parser.getText();
- System.out.println("解析字段 data="+responseCode);
- }
- if(s.equals("VOX_TYPE_NAME")){
- responseCode=parser.getText();
- if(responseCode.length()!=0){
- this.append(responseCode, null);//往list里加值
- }
- System.out.println("解析字段 data="+responseCode);
- }
- } else if (eventType == XmlPullParser.END_TAG) {
- System.out.println("结束"+s+"字段解析");
- responseCode = "";
- s = "";
- }
- eventType = parser.next();
- }
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- }