【问题标题】:xml parsing issuexml解析问题
【发布时间】:2012-08-01 10:27:43
【问题描述】:

我在读取 RSS 提要值(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));
    }
}    

【问题讨论】:

  • 什么错误?你能告诉我们你的代码吗?
  • 您的代码属于问题,而不是答案。我已经把它放在那里了。请删除不是答案的答案。
  • 这个answer to a related question 可能会有所帮助。

标签: android xml-parsing


【解决方案1】:

您的描述字段中似乎有未解析的 html,并希望从其中提取更多数据。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2012-10-12
    • 1970-01-01
    • 2011-10-13
    • 2011-08-11
    相关资源
    最近更新 更多