如何在Blackberry中解析xml文档?

时间:2010-03-17 11:12:06

标签: xml-parsing blackberry-eclipse-plugin

如何在Blackberry中解析xml文件?我可以提供链接或示例代码或教程吗?

2 个答案:

答案 0 :(得分:4)

我已经使用SAX处理来自web api的XML响应,它对我来说效果很好。查看:http://developerlife.com/tutorials/?p=28

您到底想用XML完成什么?

答案 1 :(得分:0)

你应该有一个接口来实现监听器,以便在解析结束后通知你的UI线程。

import java.util.Vector;

public interface MediaFeedListner {           
          public void mediaItemParsed(Vector mObject);
          public void exception(java.io.IOException ioe);
}

使用MediaFeedListner实现您的类,然后覆盖mediaItemParsed(Vector mObject)和异常(java.io.IOException ioe)methoods。

mediaItemParsed()方法将具有通知UI线程并执行所需操作的逻辑。

这是XML解析器代码。

package com.test.net;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Vector;
import net.rim.device.api.xml.parsers.ParserConfigurationException;
import net.rim.device.api.xml.parsers.SAXParser;
import net.rim.device.api.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.span.data.MediaObject;
import com.span.utils.FileManager;

public class MediaHandler extends DefaultHandler {
    protected static final String TAG_FEED = "feed";
    protected static final String TAG_ENTRY = "entry";
    protected static final String TAG_TITLE = "title";
    protected static final String TAG_MEDIA_GROUP = "group";
    protected static final String TAG_MEDIA_CATEGORY = "category";
    protected static final String TAG_MEDIA_CONTENT = "content";
    protected static final String TAG_MEDIA_DESCRIPTION = "description";
    protected static final String TAG_MEDIA_THUMBNAIL = "thumbnail";
    protected static final String ATTR_MEDIA_CONTENT= "url";
    protected static final String ATTR_MEDIA_THUMBNAIL = "url";

    boolean isEntry = false;
    boolean isTitle = false;
    boolean isCategory = false;
    boolean isDescription = false;
    boolean isThumbUrl = false;
    boolean isMediaUrl = false;
    boolean isMediaGroup = false;

    String valueTitle = "";
    String valueCategory = "";
    String valueDescription = "";
    String valueThumbnailUrl = "";
    String valueMediaUrl = "";

    public static Vector mediaObjects = null;

    MediaObject _dataObject =  null;
    MediaFeedListner listner = null;

    public MediaHandler(MediaFeedListner listner) {
        this.listner = listner;
        mediaObjects = new Vector();
    }

    public void parseXMLString(String xmlString) {
        try {
                SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
                parser.parse(new ByteArrayInputStream(xmlString.getBytes()), this);

        } 
        catch (ParserConfigurationException e) {
            e.printStackTrace();
        } 
        catch (SAXException e) {
            e.printStackTrace();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {

        if(localName.equalsIgnoreCase(TAG_FEED)) {
            //return;
        }

        if(localName.equals(TAG_ENTRY))
        {
            _dataObject =  new MediaObject();
            isEntry = true;
        }

        if(isEntry) {

            if(localName.equalsIgnoreCase(TAG_TITLE)) {
                isTitle = true;
            }

            if(localName.equals(TAG_MEDIA_GROUP))
                isMediaGroup = true;

            if(isMediaGroup) {

                if(localName.equalsIgnoreCase(TAG_MEDIA_CONTENT)) {
                    valueMediaUrl = attributes.getValue(ATTR_MEDIA_CONTENT);
                    if(valueMediaUrl != null) {
                        _dataObject.setMediaUrl(valueMediaUrl);
                        valueMediaUrl = "";
                    }
                }

                if(localName.equalsIgnoreCase(TAG_MEDIA_THUMBNAIL)) {
                    valueThumbnailUrl = attributes.getValue(ATTR_MEDIA_THUMBNAIL);
                    if(valueThumbnailUrl != null) {
                        _dataObject.setMediaThumb(valueThumbnailUrl);
                        valueThumbnailUrl = "";
                    }
                }

                if(localName.equalsIgnoreCase(TAG_MEDIA_DESCRIPTION)) {
                    isDescription = true;
                }

                if(localName.equalsIgnoreCase(TAG_MEDIA_CATEGORY)) {
                    isCategory = true;
                }
            }
        }
    }

    public void characters(char[] ch, int start, int length) throws SAXException {

        if(isTitle){
            valueTitle = new String(ch, start, length);
            _dataObject.setMediaTitle(valueTitle);
            System.out.println("Title  value " + valueTitle);
            valueTitle = "";
        }

        if(isCategory){
            valueCategory = new String(ch, start, length);
            _dataObject.setMediaCategory(valueCategory);
            System.out.println("category  value " + valueCategory);
            valueCategory = "";
        }

        if(isDescription){
            valueDescription = new String(ch, start, length);
            _dataObject.setMediaDesc(valueDescription);
            System.out.println("category  value " + valueDescription);
            valueDescription = "";
        }
    }

    public void endElement(String uri, String localName, String name) throws SAXException {

        if(localName.equalsIgnoreCase(TAG_FEED)) {
            listner.mediaItemParsed(mediaObjects);
            printMediaInfo(mediaObjects);
        }
        if(localName.equalsIgnoreCase(TAG_ENTRY)) {
            isEntry = false;
            isTitle = false;
            isCategory = false;
            isDescription = false;

            mediaObjects.addElement(_dataObject);
        }
    }

    public static void printMediaInfo(Vector v){
        int length  = v.size();

        for(int i = 0 ; i <length ; i++){
            MediaObject mediaObj = (MediaObject) v.elementAt(i);

            FileManager.getInstance().writeLog("Title: " + mediaObj.getMediaTitle());
            FileManager.getInstance().writeLog("Category: " + mediaObj.getMediaCategory());
            FileManager.getInstance().writeLog("Desc: " + mediaObj.getMediaDesc());
            FileManager.getInstance().writeLog("URL: " + mediaObj.getMediaUrl());
            FileManager.getInstance().writeLog("Thumb: " + mediaObj.getMediaThumb());
            FileManager.getInstance().writeLog("Fav count: " + mediaObj.getMediaFavCount());
            FileManager.getInstance().writeLog("View Count: " + mediaObj.getMediaViewCount());
            FileManager.getInstance().writeLog("Ratings: " + mediaObj.getMediaRating());
            FileManager.getInstance().writeLog("============================================");

        }
    }
}  

完成了。