XML URL解析错误

时间:2015-08-16 22:00:58

标签: android xml parsing

我试图通过输入该xml文件的url作为我的doInBackground函数中的参数来解析我得到的xml文件。现在我调用这个函数2次。

在第一次通话期间,它可以正常工作。

在第二次调用期间,它给出了一个解析错误:

  

08-16 23:49:20.823 27735-28009 / be.project.randomreader W / System.err:org.xml.sax.SAXParseException:意外的令牌(位置:TEXT {"成功": {" tot ... @ 1:210 in java.io.InputStreamReader@9e143cb)

是否必须对"?"标志和" ="登录我的网址?

如何更改代码以解决此问题?

   //first call: 
     ArrayList<String> url= new ArrayList<String>();
        url.add("http://api.theysaidso.com/qod.xml");
        url.add("");
        new DownloadXML().execute(url);

   //second call after a click event: 
    ArrayList<String> url= new ArrayList<String>();
    url.add("http://api.theysaidso.com/");
    url.add("qod?category=" + random);
    new DownloadXML().execute(url);

   private class DownloadXML extends AsyncTask<ArrayList<String>,Void,ArrayList> {

    @Override
    protected ArrayList doInBackground(ArrayList<String>... url) {

        try {

            ArrayList<String> urlLijst = url[0];
            String query = URLEncoder.encode(urlLijst.get(1), "utf-8");
            String url1 = urlLijst.get(0) + query;

            URL url2 = new URL(url1); //.toString()
            URLConnection conn = url2.openConnection();

            DocumentBuilderFactory factory = documentBuilderFactor.get();
            DocumentBuilder parser = factory.newDocumentBuilder();
            Document doc = parser.parse(conn.getInputStream());
            parser.reset();

            NodeList nodes = doc.getElementsByTagName("quotes");
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);
                NodeList title = element.getElementsByTagName("quote");
                Element quote = (Element) title.item(0);
                lijstQuotes.add(quote.getTextContent());
            }

            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);
                NodeList title = element.getElementsByTagName("author");
                Element author = (Element) title.item(0);
                lijstQuotes.add(author.getTextContent());
            }
      }
}
}

2 个答案:

答案 0 :(得分:1)

更改您的第二个电话
url.add("http://api.theysaidso.com/");
url.add("qod?category=" + random);

 url.add("http://api.theysaidso.com/qod.xml?category=" + random);

theysaidso API似乎根据发送的标头或显式格式请求更改其编码。通过附加.xml,您将强制格式为xml。在另一种情况下,您将返回json响应并且解析器失败。更多信息在这里     https://theysaidso.com/api

答案 1 :(得分:0)

第一次打电话给你

url[0] = "http://api.theysaidso.com/qod.xml"

在第二场中:

"http://api.theysaidso.com/"

所以,你没有第二次获得XML。

尝试更改

url.add("http://api.theysaidso.com/");
url.add("qod?category=" + random);

url.add("http://api.theysaidso.com/qod?category=" + random);
url.add("");