如何在Android列表视图中显示Dom解析器结果

问题描述:

我想知道如何将以下代码的结果实现到android listview中。如何在Android列表视图中显示Dom解析器结果

感谢事先的要求

package com.androidpeople.xml.parsing; 

import java.net.URL; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class XMLParsingDOMExample extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     /** Create a new layout to display the view */ 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(1); 

     /** Create a new textview array to display the results */ 
     TextView name[]; 
     TextView website[]; 
     TextView category[]; 

     try { 

      URL url = new URL(
        "http://www.............com//example.xml"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("item"); 

      /** Assign textview array lenght by arraylist size */ 
      name = new TextView[nodeList.getLength()]; 
      website = new TextView[nodeList.getLength()]; 
      category = new TextView[nodeList.getLength()]; 

      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i); 

       name[i] = new TextView(this); 
       website[i] = new TextView(this); 
       category[i] = new TextView(this); 

       Element fstElmnt = (Element) node; 
       NodeList nameList = fstElmnt.getElementsByTagName("name"); 
       Element nameElement = (Element) nameList.item(0); 
       nameList = nameElement.getChildNodes(); 
       name[i].setText("Name = " 
         + ((Node) nameList.item(0)).getNodeValue()); 

       NodeList websiteList = fstElmnt.getElementsByTagName("website"); 
       Element websiteElement = (Element) websiteList.item(0); 
       websiteList = websiteElement.getChildNodes(); 
       website[i].setText("Website = " 
         + ((Node) websiteList.item(0)).getNodeValue()); 

       category[i].setText("Website Category = " 
         + websiteElement.getAttribute("category")); 

       layout.addView(name[i]); 
       layout.addView(website[i]); 
       layout.addView(category[i]); 

      } 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 

     /** Set the layout view to display */ 
     setContentView(layout); 

    } 
} 
+0

erm ..你想在列表视图中放什么?从DOM中读取每个元素的名称,网站和类别的行?你需要更清楚地指定你想要做什么。 – 2011-02-06 20:57:51

+0

您绝对应该将网络代码从`onCreate()`移出到后台线程中。 – 2011-02-14 21:15:26

请指导我如何,我可以把这个代码转换成机器人的ListView

创建的BaseAdapter,围绕你的解析DOM包装一个子类,并返回行通过getView()。这与使用ArrayAdapter代替ArrayList或使用CursorAdapter代替Cursor并没有太大的不同,除非您必须亲自完成更多工作,因为Android中没有DOMAdapter