2012-08-03 115 views
0

我在閱讀RSS提要值(XML格式)時遇到此錯誤。xml解析問題

當XML文件中存在純文本值,但是存在任何HTML元素(即<p>, <HTML>, <image>)時,它成功讀取標題和描述。在XML文件中,它不顯示數據。

我使用this URL來獲取XML數據。

我想從這個描述標籤中使用HTML對象,即Img標籤。所以請讓我知道我怎麼能得到這個?

下面是代碼:

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); 
} 

=====這是我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)); 
    } 
}  
+2

什麼錯誤?你能告訴我們你的代碼嗎? – 2012-08-03 11:26:58

+0

下面是我的代碼... – 2012-08-04 07:01:09

+0

您的代碼屬於問題,而不是答案。我已經把它放在那裏。請刪除不是答案的答案。 – 2012-08-04 10:20:59

回答

0

看來你得到未解析HTML在你的描述字段並希望從裏面提取更多數據。

要做到這一點,你應該使用一個html解析器,一個好的考慮是jsoup。您可以通過查看jsoup cookbook開始使用它。

其他的html解析器可能是可用的,但我很確定這可以與android一起工作。

請使用真正的解析器,但不要考慮trying to parse html using regular expressions