2009-10-21 7 views
1

J'apprenais le Android api d'un livre, et il semble qu'il n'y ait aucune mention d'un stream-lined api pour traiter raw xml (lecture et écriture). Sa suggestion pour l'analyse est le XmlPullParser, et ses exemples semblent horribles compte tenu du genre de api's Je suis gâté par dans d'autres plates-formes (LINQ to XML en particulier).Builder/analyseur xml de flux-doublé dans Android?

Est-ce la meilleure technique disponible sur le Android platform?

Évidemment, je peux écrire un emballage pour éviter les choses répétitives, mais je serais surpris si une telle chose n'existe pas déjà.

En outre, il ne fait même pas mention de la création xml structures dans le code. Quelles sont mes options pour les deux? Sur une note de côté, est-ce que les développeurs Java connaissent déjà LINQ to XML in .Net quelque chose d'équivalent en Java?

Répondre

2

Puisque vous ne voulez probablement pas à charger les DOMs de taille importante dans la mémoire Android - tirez et parseurs SAX sont préférés façon de traiter avec XML dans Android. Je pense qu'il est rentable d'investir dans la compréhension du fonctionnement de SAX et d'écrire un gestionnaire personnalisé plutôt que de s'appuyer sur certaines bibliothèques génériques qui peuvent être incompatibles ou surutilisées. J'analyse XML dans mes applications en utilisant SAX tout le temps et je suis très satisfait de la vitesse (la plupart du temps)

+0

Je prévois d'écrire un tutoriel pour l'analyse SAX des flux XML dans Android sur Androidguys.com. Temps autorisé - à la fin de la semaine, alors restez-y – Bostone

2

Eh bien, je suis assez nouveau pour Java, mais voici ce que j'ai glané jusqu'à présent sur l'analyse syntaxique xml sur Android:

L'approche XmlPullParser est recommandée pour Android en raison de contraintes de ressources. Il existe un analyseur DOM disponible sur Android, qui vous permet d'utiliser XPath pour naviguer dans un document XML. Utiliser le DOM signifie que vous devez charger le document entier en mémoire à la fois, cependant. La méthode XmlPullParser est beaucoup plus efficace en termes de mémoire utilisée.

La méthode XmlPullParser prend un peu de temps pour se familiariser avec LINQ en XML ou XPath, mais ce n'est pas trop mauvais à mon humble avis (au moins avec les documents que j'ai analysés). Si vous travaillez avec de petits documents XML, vous pouvez certainement utiliser le DOM avec XPath.

Il y a un article décent sur les différentes méthodes de lecture et d'écriture XML avec Android ici: http://www.ibm.com/developerworks/opensource/library/x-android/index.html

1

J'ai eu les mêmes problèmes avec l'analyse syntaxique xml ou xhtml et j'ai fini par écrire un webservice le faisant pour moi .

Android Device ->(Request URL) -> Webservice Get and Parse - 
-> (Data) -> Android Device 

Vous pouvez transmettre les données dans JSON pour les utiliser sur l'appareil. L'avantage de ceci est que vous pouvez réduire le trafic sur le réseau mobile lent et modifier l'analyse sans libérer une nouvelle application Android.

Peut-être que cela fonctionnera pour vous aussi.

salutations

+0

Donc, vous dites un proxy fait l'analyse, et vous renvoyez des données dans un format natif pour l'application Android? C'est assez simple, mais je possède les deux extrémités de la transaction. Ce que je cherche, c'est comment sérialiser et désérialiser mes objets.En C# je peux le faire de façon déclarative avec des attributs ... existe-t-il en Java? – Rich

+0

Pour la sérialisation, nous utilisons Hessian http://hessian.caucho.com/ il existe une lib Android pour ce appelé hessdroid et une lib pour C# aussi. Si les données ne sont pas trop grandes, vous pouvez utiliser json http://json.org/ pour le transport. Dans android existe un paquet pour traiter les données json http://developer.android.com/reference/org/json/package-summary.html – n3utrino

+0

Hessian semble parfait pour moi en fait. Je peux juste changer mes signatures de service pour passer des chaînes et mettre Hessian aux deux extrémités pour sérialiser/désérialiser. Jusqu'à présent, la documentation semble assez mouvementée pour Hessian ... de bons liens avec la documentation ou des classes que je devrais regarder pour juste sérialiser et désérialiser des objets? – Rich