[英]XPath XML data parsing in android very slow
android中的xpath.evaluate解析每個過程大約需要8-9秒。 我使用了大約8種不同的xpath評估方法,並且我的程序需要大約1分35秒來加載。
我為此使用AsyncTask,並且我不想實現標准JDK中未包含的其他解析器。
許多落后的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循環的頂部,我很確定它將解決您的問題。 但是,如果它不嘗試不使用它。 我的意思是嘗試將您的字符串讀入輸入流並使用它。
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();
}
}
我們知道,如果您不小心的話,字符串處理可能會成為一種折磨。
當我用Java SE編寫一個swing程序時,我遇到了同樣的麻煩。 我不得不調用xpath.evalute方法大約12次,每次至少花費2-3秒,這使我的程序非常慢。
簡單的解決方案是使用子字符串。 這聽起來似乎很幼稚,但需要大量工作,但是如果您要從XML解析10個以下不同的參數,並且最重要的是XML是可靠且格式正確的,那么它實際上是可行的。
如果您只需要在整個文檔中解析8個不同的參數,則此方法非常容易實現。 只需使用for循環。
實現這樣的事情:首先,將整個XML文檔解析為一個字符串。 我們稱之為yourXmlDoc。 並將濕度值存儲在String數組中。
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
}
PS僅在格式正確的XML情況下才有可能。 否則,它很難實施並且浪費時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.