Moja aplikacja będzie parsować XML otrzymany przez HTTP. O ile rozumiem, istnieją trzy główne sposoby analizowania XML:

  • SAX
  • Dom.
  • XmlPullParser

Mówi się, że SAX jest najszybszym z nich, podczas gdy DOM nie jest optymalny dla większych dokumentów XML. Ale czym jest duży dokument XML pod względem parsowania? Jaki byłby zalecany parser dla poniższych?

  • Rozmiar dokumentu XML od 1-5 kB
  • Łatwe przechodzenie przez dokument, tj. muszę znać nie tylko bieżący element, ale także elementy nadrzędne.
2
Robert Strauch 29 maj 2011, 13:14

2 odpowiedzi

Najlepsza odpowiedź

O ile rozumiem, istnieją trzy główne sposoby parsowania XML:
- SAX
- DOM
- XmlPullParser

Zło! Żaden z tych sposobów nie jest najlepszy. To, czego naprawdę potrzebujesz, to parsowanie oparte na adnotacjach przy użyciu Simple XML Framework. Aby zobaczyć, dlaczego postępuj zgodnie z tą logiką:

  1. Java działa z obiektami.
  2. XML może być reprezentowany za pomocą obiektów Java. (patrz JAXB)
  3. Adnotacje mogą służyć do mapowania tego kodu XML na obiekty Java i na odwrót.
  4. Simple XML Framework wykorzystuje adnotacje, aby umożliwić wspólne mapowanie języka Java i XML.
  5. Simple XML może działać na Androidzie (w przeciwieństwie do JAXB).
  6. Powinieneś używać Simple XML dla wszystkich potrzeb XML w Androidzie.

Aby pomóc Ci to zrobić, wskażę Ci mój własny post na blogu, który dokładnie wyjaśnia, jak korzystać z prostej biblioteki na Androidzie.

Jeśli nie masz pliku XML o wielkości 100 MB, Simple będzie dla Ciebie wystarczająco szybki. Jest dla mnie, używam go we wszystkich moich projektach XML Androida.

Uwaga Powinienem zwrócić uwagę, że jeśli wymagasz od użytkownika pobrania plików XML, które mają więcej niż 1 MB na Androida, możesz przemyśleć swoją strategię. Możesz robić to źle.

7
Robert Massaioli 25 listopad 2015, 05:50
2
Podoba mi się pomysł mapowania danych XML na obiekty Java i spróbuję. Znalazłem inny interfejs API o nazwie VTD-XML, który wydaje się być wart obejrzenia.
 – 
Robert Strauch
31 maj 2011, 10:37
Massaioli - Mam problem z prostym xml, pytanie brzmi stackoverflow.com/questions/12947320/…. Czy możesz podać kilka sugestii na ten temat?
 – 
hemu
6 listopad 2012, 12:54

Obawiam się, że to przypadek, to zależy...

Z reguły użycie Javy do zbudowania drzewa DOM z dokumentu XML będzie zużywać od 4 do 10 razy większy niż natywny rozmiar dokumentu (przy założeniu, że tekst zachodni i kodowanie UTF-8), w zależności od podstawowej implementacji. Jeśli więc szybkość i wykorzystanie pamięci nie są krytyczne, nie będzie to problemem dla wspomnianych małych dokumentów.

DOM jest powszechnie uważany za dość nieprzyjemny sposób pracy z XML-em. Aby zapoznać się z tłem, możesz spojrzeć na prezentację Elliotte Rusty Harold: Co jest nie tak z interfejsami API XML (i jak je naprawić).

Jednak korzystanie z SAX może być jeszcze bardziej żmudne, ponieważ dokument jest przetwarzany pojedynczo. SAX jest jednak szybki i zużywa bardzo mało pamięci. Jeśli możesz znaleźć parser pull, który ci się podoba, spróbuj tego.

Innym podejściem (nie super wydajnym, ale czystym i łatwym w utrzymaniu) jest zbudowanie drzewa XML w pamięci (przy użyciu, powiedzmy, DOM), a następnie użycie wyrażeń XPath do wybrania interesujących Cię informacji.

4
alexbrn 29 maj 2011, 14:15