0

I am getting this error while reading RSS feed value (XML format).

It is successfully fetching the header and description when there is plain text value in XML file but when there is any HTML element i.e <p>, <HTML>, <image>. etc.. in XML fiile , it is not displaying the data.

I am using this URL to get the XML data.

I want to use HTML object i.e Img tag from this description tag. so please let me know how can I get this?

Here is the code:

ArrayList<HashMap<String, String>> business_List = new ArrayList<HashMap<String,String>>();

XMLParser parser = new XMLParser(); 
String xml = parser.getXmlFromUrl(URL);             
Document doc = parser.getDomElement(xml); // getting DOM element

NodeList nl = doc.getElementsByTagName(KEY_ITEM);       

// looping through all song nodes <song>
for(int i=0;i<nl.getLength();i++)
{
    //creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();                            
    Element e = (Element) nl.item(i);       

        //adding each child node to HashMap key => value
    //map.put(KEY_ID, parser.getValue(e, KEY_ID));
    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));          
    map.put(KEY_PUB_DATE, parser.getValue(e, KEY_PUB_DATE));
    map.put(KEY_DESCRIPTION, parser.getValue(e, KEY_DESCRIPTION));      
    business_List.add(map);
}       
list = (ListView)findViewById(R.id.list);

// Getting adapter by passing xml data ArrayList
adpater = new LazyAdapter(this, business_List);
list.setAdapter(adpater);
}

===== and this is my xmlparserclass ===

public class XMLParser {

        // constructor
        public XMLParser() {

        }

        /**
         * Getting XML from URL making HTTP request
         * @param url string
         * */
    public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

        System.out.println("XML...." + xml);

       } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
       } catch (ClientProtocolException e) {
        e.printStackTrace();
       } catch (IOException e) {
            e.printStackTrace();
       }
            return xml;
        }

        /**
         * Getting XML DOM element
         * @param XML string
         * */
    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

        } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
                return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }

                return doc;
        }

        /** Getting node value
          * @param elem element
          */
     public final String getElementValue( Node elem ) {

         Node child;         

         if( elem != null)
         {


             if (elem.hasChildNodes())
             {

                 for( child = elem.getFirstChild(); child != null; child = child.getNextSibling())
                 {
                     if( child.getNodeType() == Node.TEXT_NODE  )
                         {
                             return child.getNodeValue();
                         }
                     }
                 }
             }
             return "";
         }

         /**
          * Getting node value
          * @param Element node
          * @param key string
          * */
     public String getValue(Element item, String str)
     {      

        NodeList n = item.getElementsByTagName(str);

        return this.getElementValue(n.item(0));
    }
}    
Don Roby
  • 40,677
  • 6
  • 91
  • 113
  • 2
    What error? And can you show us your code? – Don Roby Aug 03 '12 at 11:26
  • Your code belongs in the question, not an answer. I've put it there. Please delete the answer that's not an answer. – Don Roby Aug 04 '12 at 10:20
  • This [answer to a related question](http://stackoverflow.com/questions/11747702/android-rss-reader-description-data-fetching-error/11747831#11747831) might be helpful. – Don Roby Aug 04 '12 at 10:59

1 Answers1

0

It appears you are getting unparsed html in your description field and wish to extract more data from inside it.

To do this, you should use an html parser, and a good one to consider is jsoup. You can get started with using it by looking at the jsoup cookbook.

Other html parsers may be available, but I'm pretty sure this one works with android.

Please use a real parser though, and don't consider trying to parse html using regular expressions.

Community
  • 1
  • 1
Don Roby
  • 40,677
  • 6
  • 91
  • 113