2009-12-18 59 views

回答

11

你應該明確地使用SAX API所提供。Android的XML解析API堆在普通的Java SAX一個的頂部,這樣在我我認爲我只是使用普通的Java SAX API,這樣你就可以像普通的Java桌面項目一樣測試你的代碼。

XML解析總是很慢,使用這些SAX解析器是一樣好(除非你從零開始寫一個自定義分析器) 建議的話:儘量減少字符串比較,嘗試使用hashmaps而不是if(token.isEqual(CONSTANT_TOKEN))的長鏈);

以下是Java的XML解析的幾個例子:http://java.sun.com/developer/codesamples/xml.html#sax

Android的XML API是聲明,範式是不同了一點,所以如果你決定與準備,準備讀了幾個例子,瞭解它的方法。

最後,也許在2個月前,我看到了一個基於DOM和SAX與Android XML API的圖表比較(我現在還找不到鏈接)。得出的結論是,DOM是最慢的,SAX是最高的,但對Android的XML實現沒有太大的限制。

+1

您好ruibm它對我也有用..你可以顯示如何使用hashmaps而不是長鏈條的條件... – Dinash 2011-05-02 10:54:48

15

這是article at Developer.com比較Android上的DOM,SAX和Pull解析器的性能。它發現DOM解析器是最慢的,然後Pull解析器和SAX解析器是他們測試中速度最快的。

如果您要在應用程序中進行大量解析,可能需要對不同選項進行基準測試,以查看哪種解決方案最適合您。

我已使用XmlPullParser通過XmlResourceParser,發現運行良好,易於使用。

它通過XML返回事件,告訴你它在那裏發現了什麼。

如果你使用它,你的代碼將是這個樣子:

XmlResourceParser parser = context.getResources().getXml(R.xml.myfile); 

try { 
    int eventType = parser.getEventType(); 

    while (eventType != XmlPullParser.END_DOCUMENT) { 
     String name = null; 

     switch (eventType){ 
      case XmlPullParser.START_TAG: 
       name = parser.getName().toLowerCase(); 

       if (name.equals(SOME_TAG)) { 
        for (int i = 0;i < parser.getAttributeCount();i++) { 
         String attribute = parser.getAttributeName(i).toLowerCase(); 

         if (attribute.equals("myattribute")) { 
          String value = parser.getAttributeValue(i); 
         } 

        } 
       } 

       break; 
      case XmlPullParser.END_TAG: 
       name = parser.getName(); 
       break; 
     } 

     eventType = parser.next(); 
    } 
} 
catch (XmlPullParserException e) { 
    throw new RuntimeException("Cannot parse XML"); 
} 
catch (IOException e) { 
    throw new RuntimeException("Cannot parse XML"); 
} 
finally { 
    parser.close(); 
} 

如果你想解析XML,這不是從一個資源文件,你可以使用XmlPullParserFactory class創建一個新的XmlPullParser然後調用setInput() method

+0

有沒有一種方法來解析遠程XML與XmlResourceParser? – Thys 2009-12-18 11:29:04

+0

XmlResourceParser是XmlPullParser的子類。我應該一直在談論這個。我已添加到答案中,以顯示如何使用XmlPullParser解析遠程XML。 – 2009-12-18 11:40:41

+0

是的,直接使用PullParser:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html – rui 2009-12-18 11:53:38

1

我們也可以使用的XPath在Android的XML解析東西..

它是有用的,當你要來分析大量的數據在陣列的形式。

查看此Link for XPath Tutorial從Android解析XML內容。

享受!