xml解析问题

时间:2012-08-03 11:13:04

标签: android xml-parsing

我在阅读RSS Feed值(XML格式)时遇到此错误。

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

我正在使用this网址来获取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));
    }
}    

1 个答案:

答案 0 :(得分:0)

您的说明字段中显示您正在获取未解析的html,并希望从其中提取更多数据。

要做到这一点,你应该使用一个html解析器,一个好的考虑因素是jsoup。您可以通过查看jsoup cookbook开始使用它。

其他html解析器可能是可用的,但我非常确定这个可用于android。

请使用真正的解析器,不要考虑trying to parse html using regular expressions