Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中的XPath XML数据解析速度非常慢_Java_Android_Xml_Xpath - Fatal编程技术网

Java android中的XPath XML数据解析速度非常慢

Java android中的XPath XML数据解析速度非常慢,java,android,xml,xpath,Java,Android,Xml,Xpath,android中的xpath.evaluate解析每次大约需要8-9秒。我使用了大约8种不同的xpath求值方法,我的程序加载大约需要1分35秒 为此,我正在使用AsyncTask,我不想实现标准JDK中未包含的其他解析器 许多LAGY xpath计算代码块之一: for (int i=1;i<=36;i++){ InputSource source16 = new InputSource(new StringReader(hourly));

android中的xpath.evaluate解析每次大约需要8-9秒。我使用了大约8种不同的xpath求值方法,我的程序加载大约需要1分35秒

为此,我正在使用AsyncTask,我不想实现标准JDK中未包含的其他解析器

许多LAGY xpath计算代码块之一:

for (int i=1;i<=36;i++){
                      InputSource source16 = new InputSource(new StringReader(hourly));

                      try{
                       humidity = xpath.evaluate("/response/hourly_forecast/forecast["+i+"]/humidity", source16);


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

for(int i=1;i试着把这一行放到for循环的顶端,我确信它会解决你的问题。但是如果它不试着不使用它。我的意思是试着把你的字符串读入inputstream并使用它

InputSource source16 = new InputSource(new StringReader(hourly));
for (int i=1;i<=36;i++){
                  try{
                   humidity = xpath.evaluate("/response/hourly_forecast/forecast["+i+"]/humidity", source16);


                  }
                  catch (Exception e) {
                  e.printStackTrace();
                              }
                  }
InputSource16=新的InputSource(新的StringReader(每小时));

对于(int i=1;i我在使用Java SE编写swing程序时遇到了同样的问题。我必须调用xpath.evalute方法大约12次,每次至少需要2-3秒,这使得我的程序非常慢

简单的解决方案是使用子字符串。这听起来可能很幼稚,而且需要做很多工作,但如果您只需要从XML解析10个不同的参数,而且最重要的是XML可靠且格式良好,那么它实际上是可行的

在您的例子中,整个文档中只有8个不同的参数需要解析,这种方法非常容易实现。也可以使用for循环

实现如下内容: 首先,将整个XML文档解析为一个字符串,我们称之为yourXmlDoc,并将湿度值存储在一个字符串数组中

num1=0;
num2=0;
num3=0;
for (int i=0;i<*number of times you need to repeat*;i++){
num1=yourXmlDoc.indexOf("humidity",num3);
num2=yourXmlDoc.indexOf("/humidity",num1);
num3=num2;
humidity[i]=yourXmlDoc.substring(num1+9,num2-1);
System.out.println(humidity[i]);

.. continue with more parameters to parse and let its starting point be num3
}
num1=0;
num2=0;
num3=0;

对于(int i=0;如果我移动“InputSource”行到顶部,然后它只计算1次,然后给出一个异常-->java.io.IOException:Stream closedBecause inputSource读取并完成。请使用字符串变量或其他方法进行计算。我尝试了所有操作,包括将输入源更改为字符串、输入流、字节数组输入流。甚至尝试初始化将源本身输入到字符串和字节数组输入流,但无效。程序不工作。它不工作。错误包括从文件过早结束到“javax.xml.transform.TransformerException”的致命错误好的,我花了大约两倍的代码量和半个小时来实现这一点。我的XML格式当然很好。好的是,它将我的程序的延迟精确地减少了97%。它现在在3秒内运行:)感谢您提供此解决方案。我开始寻找一个好的解析器,但我认为它不会比这更快。在总共3秒钟中,此过程可能需要不到1秒钟的时间。我认为这是正确的答案:)