title: how to read the img tag inside the description tag of rss
body: <p>I am trying to read yahoo weather rss and display them in my android application.</p>
  
  <p>There is an img src="url of the image" tag in side the &lt; description>&lt; /description> tag of the rss. </p>
  
  <p>But I do not know how to read that url. Can anybody plz help me in this regard?</p>
  
  <p>Here is my code:</p>
  
  <pre><code>public class RssReader {
  
  private final static String BOLD_OPEN = "&lt;B&gt;";
  private final static String BOLD_CLOSE = "&lt;/B&gt;";
  private final static String BREAK = "&lt;BR&gt;";
  private final static String ITALIC_OPEN = "&lt;I&gt;";
  private final static String ITALIC_CLOSE = "&lt;/I&gt;";
  private final static String SMALL_OPEN = "&lt;SMALL&gt;";
  private final static String SMALL_CLOSE = "&lt;/SMALL&gt;";
  
  public static List&lt;JSONObject&gt; getLatestRssFeed(){
      String feed ="http://weather.yahooapis.com/forecastrss?w=554890&amp;u=c"; 
  
      RSSHandler rh = new RSSHandler();
      List&lt;Article&gt; articles =  rh.getLatestArticles(feed);
      Log.e("RSS ERROR", "Number of articles " + articles.size());
      return fillData(articles);
  }
  private static List&lt;JSONObject&gt; fillData(List&lt;Article&gt; articles) {
  
      List&lt;JSONObject&gt; items = new ArrayList&lt;JSONObject&gt;();
      for (Article article : articles) {
          JSONObject current = new JSONObject();
          try {
              buildJsonObject(article, current);
          } catch (JSONException e) {
              Log.e("RSS ERROR", "Error creating JSON Object from RSS feed");
          }
          items.add(current);
      }
  
      return items;
  }
  private static void buildJsonObject(Article article, JSONObject current) throws            JSONException {
      String title = article.getTitle();
      String description = article.getDescription();
      String date = article.getPubDate();
  
      StringBuffer sb = new StringBuffer();
      sb.append(BOLD_OPEN).append(title).append(BOLD_CLOSE);
      sb.append(BREAK);
      sb.append(description);
      sb.append(BREAK);
      sb.append(SMALL_OPEN).append(ITALIC_OPEN).append(date).append(ITALIC_CLOSE).append(SMALL_CLOSE);
  
      current.put("text", Html.fromHtml(sb.toString()));
  }
  }
  </code></pre>
  
  <p>SO here the img tag is inside the Description tag. How can I read it?? any help??</p>
  
  <p>Here is the RSSHandler:</p>
  
  <pre><code>public class RSSHandler extends DefaultHandler {
  
  // Feed and Article objects to use for temporary storage
  private Article currentArticle = new Article();
  private List&lt;Article&gt; articleList = new ArrayList&lt;Article&gt;();
  
  // Number of articles added so far
  private int articlesAdded = 0;
  
  // Number of articles to download
  private static final int ARTICLES_LIMIT = 15;
  
  //Current characters being accumulated
  StringBuffer chars = new StringBuffer();
  
  
  /* 
   * This method is called everytime a start element is found (an opening XML marker)
   * here we always reset the characters StringBuffer as we are only currently interested
   * in the the text values stored at leaf nodes
   * 
   * (non-Javadoc)
   * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
   */
  public void startElement(String uri, String localName, String qName, Attributes atts) {
      chars = new StringBuffer();
  }
  
  
  
  /* 
   * This method is called everytime an end element is found (a closing XML marker)
   * here we check what element is being closed, if it is a relevant leaf node that we are
   * checking, such as Title, then we get the characters we have accumulated in the StringBuffer
   * and set the current Article's title to the value
   * 
   * If this is closing the "Item", it means it is the end of the article, so we add that to the list
   * and then reset our Article object for the next one on the stream
   * 
   * 
   * (non-Javadoc)
   * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
   */
  public void endElement(String uri, String localName, String qName) throws SAXException {
  
      if (localName.equalsIgnoreCase("title"))
      {
          Log.d("LOGGING RSS XML", "Setting article title: " + chars.toString());
          currentArticle.setTitle(chars.toString());
  
      }
      else if (localName.equalsIgnoreCase("description"))
      {
          Log.d("LOGGING RSS XML", "Setting article description: " + chars.toString());
          currentArticle.setDescription(chars.toString());
      }
      else if (localName.equalsIgnoreCase("pubDate"))
      {
          Log.d("LOGGING RSS XML", "Setting article published date: " + chars.toString());
          currentArticle.setPubDate(chars.toString());
      }
      else if (localName.equalsIgnoreCase("encoded"))
      {
          Log.d("LOGGING RSS XML", "Setting article content: " + chars.toString());
          currentArticle.setEncodedContent(chars.toString());
      }
      else if (localName.equalsIgnoreCase("item"))
      {
  
      }
      else if (localName.equalsIgnoreCase("link"))
      {
          try {
              Log.d("LOGGING RSS XML", "Setting article link url: " + chars.toString());
              currentArticle.setUrl(new URL(chars.toString()));
          } catch (MalformedURLException e) {
              Log.e("RSA Error", e.getMessage());
          }
  
      }
  
  
  
  
      // Check if looking for article, and if article is complete
      if (localName.equalsIgnoreCase("item")) {
  
          articleList.add(currentArticle);
  
          currentArticle = new Article();
  
          // Lets check if we've hit our limit on number of articles
          articlesAdded++;
          if (articlesAdded &gt;= ARTICLES_LIMIT)
          {
              throw new SAXException();
          }
      }
  }
  
  
  
  
  
  /* 
   * This method is called when characters are found in between XML markers, however, there is no
   * guarante that this will be called at the end of the node, or that it will be called only once
   * , so we just accumulate these and then deal with them in endElement() to be sure we have all the
   * text
   * 
   * (non-Javadoc)
   * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
   */
  public void characters(char ch[], int start, int length) {
      chars.append(new String(ch, start, length));
  }
  
  
  
  
  
  /**
   * This is the entry point to the parser and creates the feed to be parsed
   * 
   * @param feedUrl
   * @return
   */
  public List&lt;Article&gt; getLatestArticles(String feedUrl) {
      URL url = null;
      try {
  
          SAXParserFactory spf = SAXParserFactory.newInstance();
          SAXParser sp = spf.newSAXParser();
          XMLReader xr = sp.getXMLReader();
  
          url = new URL(feedUrl);
  
          xr.setContentHandler(this);
          xr.parse(new InputSource(url.openStream()));
  
  
      } catch (IOException e) {
          Log.e("RSS Handler IO", e.getMessage() + " &gt;&gt; " + e.toString());
      } catch (SAXException e) {
          Log.e("RSS Handler SAX", e.toString());
      } catch (ParserConfigurationException e) {
          Log.e("RSS Handler Parser Config", e.toString());
      }
  
      return articleList;
  }
  </code></pre>