Android w3c DOM解析速度很慢

时间:2013-03-19 17:18:47

标签: java android xml parsing dom

我的android应用程序中的解析存在一些实际问题。我正在使用DOM样式解析器删除一些XML文件,并且花费将近20秒来执行它并在其上运行一些代码,文件不超过30KB。

这是从方法中获取的一些代码:

代码如下:

HttpURLConnection vehicles_conn = (HttpURLConnection) new URL("XXXXXXX").openConnection();
                vehicles_conn.setRequestMethod("POST");                     
                vehicles_conn.setDoInput(true);
                vehicles_conn.setDoOutput(true);
                vehicles_conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
                vehicles_conn.setChunkedStreamingMode(0);
                String vehicles = URLEncoder.encode("LogonToken", "UTF-8") + "=" + URLEncoder.encode(gettoken, "UTF-8");
                OutputStream vehicles_os = vehicles_conn.getOutputStream();
                Writer vehicles_wr = new OutputStreamWriter(vehicles_os);
                vehicles_wr.write(vehicles);
                vehicles_wr.flush();
                InputStream vehicles_is = vehicles_conn.getInputStream();
                vehicles_wr.close();
                DocumentBuilderFactory vehicles_dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder vehicles_dBuilder = vehicles_dbFactory.newDocumentBuilder();
                Document vehicles_doc = vehicles_dBuilder.parse(vehicles_is);
                NodeList vehicles_nList = vehicles_doc.getElementsByTagName("UNIT");

for (int temp = 0; temp < vehicles_nList.getLength(); temp++) {
                    //Create a new vehicle object   
                    Vehicle v = new Vehicle();

                    Node vehicles_nNode = vehicles_nList.item(vehicles_temp);
                    if (vehicles_nNode.getNodeType() == Node.ELEMENT_NODE) {

                        Element vehicles_eElement = (Element) vehicles_nNode;
                        String something = (getTagValue("ID", vehicles_eElement));

.........

现在,我有3个(http连接只在方法中被称为ONCE),它在第一个XML文件中运行26个“单位” - 让我们称之为XML1,然后迭代第二个XML2使用25个“位置”,直到ID字段与XML1匹配,然后抓取XML2的其他几个字段并将它们存储到arraylist中,然后使用“Peopel”对XML3执行相同操作。完成后,它会返回到顶部并再次使用列表中的下一个ID启动。

现在,我的问题是这个过程需要花费不到几秒的时间,理想情况下需要20秒!据记录,这是通过LG Nexus 4上的20Mbit通过Wifi。可以通过Motoral Defy和Galaxy Ace 2进行复制。有谁知道它为什么这么慢?

我是Java / Android的新手,所以我不知道我是否编写了错误的代码,或者XML解析速度很慢?

1 个答案:

答案 0 :(得分:0)

您的代码似乎正在将XML解析为DOM,然后遍历DOM一次以提取您需要的数据。您应该考虑使用SAX解析器并在解析后的项目交付给您的应用程序时即时提取数据。