Java SAXParseException:尝试在Android上解析远程XML时出现意外标记

Java SAXParseException:尝试在Android上解析远程XML时出现意外标记,java,android,xml,saxparser,saxparseexception,Java,Android,Xml,Saxparser,Saxparseexception,我试图从互联网上解析一个XML,并在一个简单的文本视图中显示它的一些数据。这是我的密码: public class MainActivity extends AppCompatActivity { TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

我试图从互联网上解析一个XML,并在一个简单的文本视图中显示它的一些数据。这是我的密码:

    public class MainActivity extends AppCompatActivity {

    TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1=(TextView)findViewById(R.id.textView1);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        try {

            String UTF8 = "utf-8";
            URL url = new URL("http://pollenapps.com/AllergyAlertWebSVC/api/1.0/Forecast/ForecastForZipCode?Zipcode=02145&Affiliateid=9642&AppID=2.1.0&uid=6693636764.xml");
            URLConnection urlConnection = url.openConnection();
            //InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            //BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
            //InputStream in = new URL("http://pollenapps.com/AllergyAlertWebSVC/api/1.0/Forecast/ForecastForZipCode?Zipcode=02145&Affiliateid=9642&AppID=2.1.0&uid=6693636764.xml").openStream();
            //getAssets().open("file.xml");
            InputStream in = url.openStream();

            //InputStream is2 = new FileInputStream(file);

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            //Document doc = dBuilder.parse(new InputSource(new InputStreamReader(in, "UTF-8")));
            Document doc = dBuilder.parse(in, "UTF-8");
            //Document doc = dBuilder.parse(in);

            Element element = doc.getDocumentElement();
            element.normalize();

            NodeList nList = doc.getElementsByTagName("allergyForecast");

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

                Node node = nList.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element2 = (Element) node;
                    tv1.setText(getValue("Day0", element2));
                }
            }

        } catch (Exception e) {e.printStackTrace();}

    }

    private static String getValue(String tag, Element element) {
        NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = nodeList.item(0);
        return node.getNodeValue();
    }
}
根据一些研究,解析器似乎无法判断XML文件的编码类型,因此我需要定义它。然而,我不知道如何定义它在这里。。。我试图定义“UTF-8”编码的尝试可以在注释掉的行中看到,但这些都不起作用。有什么建议吗

XML:


谢谢大家!

您在响应中获得的数据是json格式的,而不是xml格式的。当您从UrlOpenConnection获取inputStream时,url中的前缀
.xml
不是以xml形式获取数据,可以删除。 要查看您获得的数据,请执行以下操作:

        String data = "";
        while (in.available() > 0)
            data += (char)in.read();
        System.out.println(data);
结果是:{“过敏预测”:{“第0天”:4.1,“第1天”:3.7,“第2天”:4.6,“第3天”:1.4,“第4天”:2.9,…}

要解析日期,您可以使用Gson作为示例。解析元素的代码段:

        JsonElement jelement = new JsonParser().parse(new InputStreamReader(in));
     // or from readed from inputStream string:
     // JsonElement jelement = new JsonParser().parse(data);
        JsonObject jobject = jelement.getAsJsonObject();
        jobject = jobject.getAsJsonObject("allergyForecast");
然后,您可以从jsonObject获得所需的值。 或者,如果您只需要xml,您可以检查API如何获得xml响应

        JsonElement jelement = new JsonParser().parse(new InputStreamReader(in));
     // or from readed from inputStream string:
     // JsonElement jelement = new JsonParser().parse(data);
        JsonObject jobject = jelement.getAsJsonObject();
        jobject = jobject.getAsJsonObject("allergyForecast");