2010-06-17 5 views
0

J'ai chargé un fichier XML en tant que NSData dans la mémoire et j'analyse les éléments en utilisant NSXMLParser. Bien que cela fonctionne, c'est un code très moche et difficile à maintenir puisqu'il y a environ 150 éléments différents à analyser.Un moyen rapide d'obtenir un NSDictionary à partir d'une représentation XML NSData?

Je sais qu'il existe de bonnes solutions tierces, mais je veux le garder avec le SDK iPhone à des fins de pratique et de plaisir.

Alors j'ai pensé: Pourquoi ne pas convertir ce fichier XML en NSDictionary? Ayant ceci, je pourrais employer l'énumération rapide pour aller au-dessus des éléments.

Ou est-ce juste la même quantité de code moche nécessaire pour analyser et traiter un XML tout de suite avec NSXMLParser? Est-ce que je construirais un NSDictionary pour chaque noeud trouvé dans le XML et en créerais un énorme, contenant toute la structure et les données? Ou y a-t-il un moyen encore plus simple?

Répondre

1

NSDictionary ne peut lire aucun format xml aléatoire. Il peut seulement lire xml dans un format spécifique qui est le format plist. Le plist est antérieur à xml et le format actuel de plist est juste une version xml de l'original. Le nom plist est une contraction de "liste de propriétés" car les fichiers définissent les propriétés d'une instance d'une classe. Par conséquent, toutes les balises xml du fichier doivent définir les éléments d'une instance de classe qui implémente le protocole NSCoder. Donc, oui, si vous commencez par un fichier XML arbitraire, vous devez l'analyser laborieusement pour le convertir en un NSDictionary ou une autre classe.

Je ne voudrais pas écrire un analyseur à partir de zéro pour une raison quelconque, sauf comme un exercice d'apprentissage. Chaque format xml nécessite un analyseur différent. Il est préférable d'utiliser un analyseur existant pour que 80% du travail soit fait pour vous. Dans un vrai projet, vous finirez par le faire de toute façon.

1

Il y a de nombreux analyseurs (par exemple XPathQuery, TouchXML, etc.).

+1

Que diriez-vous NSXMLParser qui vient livré avec l'iPhone SDK? Qu'est-ce que les autres font différemment? – dontWatchMyProfile

+0

Avec NSXMLParser vous devrez construire la hiérarchie des objets tout seul. Les parseurs de troisième partie renvoient généralement un objet (NSArray ou NSDictionary) qui contient la hiérarchie entière dans des objets tels que NSArray et NSDictionary. En outre, les parseurs de troisième partie, généralement basés sur libxml et non sur NSXMLParser-libxml, sont généralement plus rapides. Une dernière chose - pour autant que je sache, vous ne pouvez pas utiliser le NSXMLParser pour analyser un fichier local, mais peut-être que je me trompe sur celui-ci ... –

Questions connexes