簡體   English   中英

Android中的XPath XML數據解析非常慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM