0

我在读取 RSS 提要值(XML 格式)时收到此错误。

当 XML 文件中有纯文本值但有任何 HTML 元素时,它会成功获取标题和描述,即<p>, <HTML>, <image>. 等..在 XML 文件中,它不显示数据。

我正在使用这个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));
    }
}    
4

1 回答 1

0

看来您在描述字段中获得了未解析的 html,并希望从其中提取更多数据。

为此,您应该使用 html 解析器,一个值得考虑的好方法是jsoup您可以通过查看jsoup 食谱开始使用它。

其他 html 解析器可能可用,但我很确定这个适用于 android。

不过请使用真正的解析器,不要考虑尝试使用正则表达式解析 html

于 2012-08-04T12:47:00.907 回答