0

有没有人帮助找到为什么没有 xml 文件没有用以下代码解析的问题.... xml 格式可以在这里看到。

我尝试使用 log.i("your string goes here", xml); 逐行测试 函数但在循环开始时看不到代码的执行......

我已经习惯了 Splash 活动,其中 AsyncTask() 函数在后台执行,然后 ListActivity 用于显示所有 DOMParser 活动输出......所以任何人都可以帮助我摆脱这个问题......谢谢提前

package com.wfwf.everestnewsapp.parser;

import java.net.MalformedURLException;
import java.net.URL;

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

import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.widget.Toast;

public class DOMParser {

    private RSSFeed _feed = new RSSFeed();

    public RSSFeed parseXml(String xml) {

        URL url = null;
        try {
            url = new URL(xml);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

        try {
            // Create required instances
            DocumentBuilderFactory dbf;
            dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();

            // Parse the xml
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            // Get all <item> tags.
            NodeList nl = doc.getElementsByTagName("item");
            int length = nl.getLength();

            for (int i = 0; i < length; i++) {
                Node currentNode = nl.item(i);
                RSSItem _item = new RSSItem();

                NodeList nchild = currentNode.getChildNodes();
                int clength = nchild.getLength();

                // Get the required elements from each Item
                // Ishwor changed the code j=0 and j= j+1
                for (int j = 0; j < clength; j = j + 1) {

                    Node thisNode = nchild.item(j);
                    String theString = null;


                    /*//ishwor changed as
                     if (thisNode != null && thisNode.getFirstChild() != null) {
                            theString = thisNode.getFirstChild().getNodeValue();
                        }
                        */

                    String nodeName = thisNode.getNodeName();

                    //theString = nchild.item(j).getFirstChild().getNodeValue();

                    if(nchild.item(j).getFirstChild().getNodeValue()!=null){
                    //if (theString != null) {
                        //String nodeName = thisNode.getNodeName();

                        if ("title".equals(nodeName)) {
                            // Node name is equals to 'title' so set the Node
                            // value to the Title in the RSSItem.
                            _item.setTitle(theString);
                        }

                        else if ("description".equals(nodeName)) {
                            _item.setDescription(theString);

                            // Parse the html description to get the image url
                            String html = theString;
                            org.jsoup.nodes.Document docHtml = Jsoup.parse(html);
                            Elements imgEle = docHtml.select("img");
                            _item.setImage(imgEle.attr("src"));
                        }

                        else if ("pubDate".equals(nodeName)) {

                            // We replace the plus and zero's in the date with
                            // empty string
                            String formatedDate = theString.replace(" +0000",
                                    "");
                            _item.setDate(formatedDate);
                        }

                    }
                }

                // add item to the list
                _feed.addItem(_item);
            }

        } catch (Exception e) {
        }

        // Return the final feed once all the Items are added to the RSSFeed
        // Object(_feed).
        return _feed;
    }

}
4

1 回答 1

0
   private Document getDocument(InputStream stream) {
    Document doc = null;
    try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        if (stream != null) {
            doc = dBuilder.parse(stream);
            doc.getDocumentElement().normalize();
        } else {
        }

    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
        // TODO: handle exception
    }
    return doc;
}

private String getTagValue(String sTag, Element eElement) {
    String value = "";
    try {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0)
                .getChildNodes();
        for (int i = 0; i < nlList.getLength(); i++) {
            Node nValue = nlList.item(i);
            if (nValue != null) {
                value = value + nValue.getNodeValue().trim();
            }
        }
    } catch (Exception e) {
    }
    return value;
}

public EntityBean parseDoLogin(String requestOutput) {
    EntityBean response = null;
    InputStream stream = (InputStream) new ByteArrayInputStream(
            requestOutput.getBytes());
    Document doc = getDocument(stream);
    NodeList nodeList = doc.getElementsByTagName("startTag");
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node nNode = nodeList.item(i);
        Element iElement = (Element) nNode;
        response = new EntityBean();
        String result = new String(getTagValue("result", iElement));
            response.setResult(result);

        String msg = new String(getTagValue("message", iElement));
        response.setMsg(msg);

    }

    return response;
}
于 2013-08-07T13:58:10.560 回答