2009-12-18 14 views
10

Qualcuno può indicarmi una spiegazione o spiegarmi come posso analizzare facilmente l'XML e ottenere i valori di un documento w3c su Android utilizzando solo Android OS Libs ?Modo per analizzare XML (org.w3c.Document) su Android

ho cercato di usare un'implementazione di dom4j, ma è molto lento :-(

risposta

11

Si consiglia di utilizzare definitivamente le API SAX fornito. Pile XML Android parse API in cima alla normale Java SAX uno così nel mio parere Vorrei semplicemente utilizzare la normale API SAX Java e in questo modo si ottiene la possibilità di testare il codice come normale progetto Java desktop

L'analisi XML è sempre lenta e l'utilizzo di questi parser SAX è buono come si ottiene (a meno che tu scrivi un parser personalizzato da zero) Un consiglio: cerca di minimizzare il confronto tra stringhe e prova ad usare le hashmaps invece delle lunghe catene di if (token.isEqual (CONSTANT_TOKEN)) ;.

Ecco alcuni esempi di Java parsing XML: http://java.sun.com/developer/codesamples/xml.html#sax

Android API XML è dichiarativa, il paradigma è un po 'diverso, quindi nel caso in cui si decide di andare con questo, preparatevi a leggere alcuni esempi per imparare la sua modi.

Infine, forse 2 mesi fa ho visto un grafico di benchmark tra DOM vs SAX e API XML di Android (non riesco a trovare il collegamento ora). La conclusione è stata che DOM era di gran lunga il più lento e SAX era al top, ma non con un enorme margine sull'implementazione XML di Android.

+1

hi ruibm è utile anche per me .. È possibile mostrare come utilizzare le hashmap anziché le lunghe catene di condizioni if ​​... – Dinash

15

Ecco uno article at Developer.com confronto delle prestazioni dei parser DOM, SAX e Pull su Android. Ha trovato che il parser DOM è di gran lunga il più lento, quindi il parser Pull e il parser SAX sono i più veloci nel loro test.

Se hai intenzione di fare un sacco di analisi nella tua applicazione, potrebbe valere la pena di confrontare le diverse opzioni per vedere quale funziona meglio per te.

Ho usato il XmlPullParser tramite XmlResourceParser e ho trovato che funzionava bene ed era facile da usare.

Funziona attraverso gli eventi di ritorno XML che ti dicono che cosa si trova lì.

Se lo si utilizza, il codice sarà simile a questa:

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(); 
} 

Se si vuole analizzare XML che non è da un file di risorse è possibile creare un nuovo XmlPullParser utilizzando il XmlPullParserFactory class e quindi chiamare il setInput() method .

+0

Esiste un modo per analizzare XML remoto con XmlResourceParser? – Thys

+0

XmlResourceParser è una sottoclasse di XmlPullParser. Avrei dovuto parlarne.Ho aggiunto alla risposta per mostrare come è possibile analizzare XML remoto con un XmlPullParser. –

+0

Sì, usa direttamente PullParser: http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html – rui

1

Possiamo anche usare XPath in Android analisi XML cose ..

E 'utile quando si arriva ad analizzare un sacco di dati in forma di un array.

Dai un'occhiata a questo Link per XPath Tutorial nell'analisi del contenuto XML da Android.

Divertiti !!

Problemi correlati