2010-03-17 4 views

Répondre

4

J'ai utilisé SAX pour traiter des réponses XML à partir d'une API Web et cela a bien fonctionné pour moi. Découvrez: http://developerlife.com/tutorials/?p=28

Qu'essayez-vous exactement d'accomplir avec XML?

+1

+1 pour le lien, presque oublié cet article! – Dan

+1

+1 est très utile pour comprendre le processus d'analyse – BBdev

0

Vous devez disposer d'une interface pour implémenter l'écouteur afin de notifier votre thread d'interface utilisateur une fois l'analyse terminée.

import java.util.Vector; 

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

mettre en œuvre votre classe avec MediaFeedListner puis remplacer les mediaItemParsed (Vector mObject) et (exception java.io.IOException) IOE methoods.

La méthode mediaItemParsed() aura la logique pour notifier le thread d'interface utilisateur et effectuer les opérations requises.

Voici le code de l'analyseur 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("============================================"); 

     } 
    } 
} 

C'est fait.