Как разобрать XML-документ в Blackberry?

Как я могу разобрать XML-файл в Blackberry? Могу ли я получить ссылку или пример кода или учебник?


person Master    schedule 17.03.2010    source источник


Ответы (2)


Я использовал SAX для обработки XML-ответов от веб-API, и это сработало для меня хорошо. Проверьте: http://developerlife.com/tutorials/?p=28

Чего именно вы пытаетесь достичь с помощью XML?

person frayedthread    schedule 06.05.2010

У вас должен быть интерфейс для реализации прослушивателя, чтобы уведомить ваш поток пользовательского интерфейса после завершения синтаксического анализа.

import java.util.Vector;

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

реализуйте свой класс с помощью MediaFeedListner, а затем переопределите методы mediaItemParsed(Vector mObject) и exception(java.io.IOException ioe).

mediaItemParsed() будет иметь логику для уведомления потока пользовательского интерфейса и выполнения необходимых операций.

Вот код парсера 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("============================================");

        }
    }
}  

Это сделано.

person Nilanchal    schedule 04.08.2011