【问题标题】:Reading data from response which is in xml从 xml 中的响应中读取数据
【发布时间】:2011-06-27 08:28:01
【问题描述】:

我正在开发一个应用程序,因为我已经读取了我将从 respose 以 xml 格式获取的数据。那么如何实现呢。

我并没有在我身边开发网络应用程序。但是检索一个 url,我会得到一个 xml 数据作为响应。

【问题讨论】:

    标签: java android xml response xml-parsing


    【解决方案1】:

    创建一个类 XMLfunctions

    public class XMLfunctions {
    
    public final static Document XMLfromString(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) {
            System.out.println("XML parse error: " + e.getMessage());
            return null;
        } catch (SAXException e) {
            System.out.println("Wrong XML file structure: " + e.getMessage());
            return null;
        } catch (IOException e) {
            System.out.println("I/O exeption: " + e.getMessage());
            return null;
        }
    
        return doc;
    
    }
    
    
    /** Returns element value
      * @param elem element (it is XML tag)
      * @return Element value otherwise empty String
      */
     public final static String getElementValue( Node elem ) {
         Node kid;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
                     if( kid.getNodeType() == Node.TEXT_NODE  ){
                         return kid.getNodeValue();
                     }
                 }
             }
         }
         return "";
     }
    
        public static String getTopNewsXML(){    
            String line = null;
    
            try {
    
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost("url");
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                line = EntityUtils.toString(httpEntity);
    
            } catch (UnsupportedEncodingException e) {
                line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
            } catch (MalformedURLException e) {
                line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
            } catch (IOException e) {
                line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
            }
            String st= ParseXMLNode(line,"doc");
            return st;
    
        }
    
    public static String ParseXMLNode(String str,String node){
         String xmlRecords = str;
         String results = "";
         String[] result = new String [10];
         StringBuffer sb = new StringBuffer();
         try {
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
             DocumentBuilder db = dbf.newDocumentBuilder();
             InputSource is = new InputSource();
             is.setCharacterStream(new StringReader(xmlRecords));
             Document doc = db.parse(is);
             NodeList nlist = doc.getElementsByTagName(node);
    
             sb.append("<results count=");
             sb.append("\"10\"");
             sb.append(">\r\n");
    
    
             for (int i = 0; i < nlist.getLength(); i++) {
                    Node node1 = nlist.item(i);
                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
                        Element element = (Element) node1;
                        NodeList nodelist = element.getElementsByTagName("str");
                        Element element1 = (Element) nodelist.item(0);
                        NodeList title = element1.getChildNodes();
    
                        System.out.print((title.item(0)).getNodeValue());
                        sb.append("<result>\r\n");
                            sb.append("<title>");
                                sb.append(title.item(0).getNodeValue().trim());
                            sb.append("</title>\r\n");
    
                        sb.append("</result>\r\n");
                        result[i] = title.item(0).getNodeValue();
    
                       }
                }
             sb.append("</results>");
         } catch (Exception e) {
             System.out.println("Exception........"+results );
             e.printStackTrace();
         }
         return sb.toString();
         }
    }
    
    public static int numResults(Document doc) {
        Node results = doc.getDocumentElement();
        int res = -1;
        try {
            res = Integer.valueOf(results.getAttributes().getNamedItem("count")
                    .getNodeValue());
        } catch (Exception e) {
            res = -1;
        }
        return res;
    }
    
    public static String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        return XMLfunctions.getElementValue(n.item(0));
    }
    

    在你的活动中

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
    
            String xml = XMLfunctions.getTopNewsXML();
            Document doc = XMLfunctions.XMLfromString(xml);
    
            int numResults = XMLfunctions.numResults(doc);
            Log.d(LOG_TAG, "Number of Results: " + numResults);
            if ((numResults <= 0)) {
                Toast.makeText(ParentActivity.this, "No Result Found",Toast.LENGTH_LONG).show();
                return null;
            }
    
            NodeList nodes = doc.getElementsByTagName("result");
    
            for (int i = 0; i < nodes.getLength(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
    
                Element e = (Element) nodes.item(i);
                map.put("title", XMLfunctions.getValue(e, "title"));
                mylist.add(map);
            }
            return mylist;
    

    然后就可以把数据放到列表里了

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      为了舒适的解析看看

      here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多