2010-03-17 60 views

回答

4

我已經使用SAX處理來自web api的XML響應,並且它對我很好。退房時間:http://developerlife.com/tutorials/?p=28

您試圖用XML完成什麼?

+1

+1鏈接,幾乎忘了那篇文章! – Dan 2011-04-18 17:55:34

+1

+1它對理解解析過程非常有用 – BBdev 2011-07-21 12:20:23

0

您應該有一個接口來實現偵聽器,以便在解析結束後通知您的UI線程。

import java.util.Vector; 

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

實現與MediaFeedListner你的類,然後重寫mediaItemParsed(矢量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("============================================"); 

     } 
    } 
} 

它完成了。