2009-07-31 4 views
1

Laissez-moi essayer d'expliquer aussi clair que possible ce que je veux dire exactement avec cette question.xml analyse dans l'iPhone et d'obtenir d'autres tags avec les mêmes noms

Le xml semble plutôt que ce

<Books> 
<Book id="1"> 
<title>Circumference</title> 
<author>Nicholas Nicastro</author> 
<summary>Eratosthenes and the Ancient Quest to Measure the Globe.</summary> 
</Book> 

<Book id="2"> 
<title>Copernicus Secret</title> 
<author>Jack Repcheck</author> 
<summary>How the scientific revolution began</summary> 

</Book> 

</Books> 

Il ressemblera à ceci

<Books> 
<Book id="1"> 
<title>Circumference</title> 
<author>Nicholas Nicastro</author> 
<summary id ='1'>Eratosthenes and the Ancient Quest to Measure the Globe.</summary> 
<summary id ='2'>Eratosthenes more info in another tag.</summary> 
<summary id ='3'>Eratosthenes and again another tag.</summary> 
<summary id ='4'>Eratosthenes and the final tag another one here</summary> 
</Book> 

<Book id="2"> 
<title>Copernicus Secret</title> 
<author>Jack Repcheck</author> 
<summary id ='1'>How the scientific revolution began</summary> 
<summary id ='2'>Eratosthenes more info in another tag.</summary> 
<summary id ='3'>Eratosthenes and again another tag.</summary> 
<summary id ='4'>Eratosthenes and the final tag another one here</summary> 
</Book> 

</Books> 

Maintenant, si je suis les instructions sur le site ci-dessus, il n'explique pas comment gérer sommaire 2,3,4 (le xml que j'ai besoin d'analyser ressemble à ça) et comment je peux montrer leur sortie. Tout ce que je vais obtenir est la dernière ligne. Est-ce que quelqu'un a une idée sur la façon dont je peux obtenir les autres aussi (ce qui signifie que dans ce cas, il semble ne montrer que le dernier puisque c'est probablement le dernier dans currentElementValue).

Je suis un peu confus si je devais traiter l'attribut ici ou devrais-je créer un nouveau tag de recherche dans mon analyseur?

Répondre

0

Vous aurez besoin de garder une trace des éléments de résumé que vous avez analysés jusqu'ici en gardant toutes les valeurs dans un conteneur comme un tableau: NSMutableArray. Ainsi, au lieu d'un NSString pour conserver le résumé, vous auriez un NSMutableArray pour contenir la liste des résumés que vous avez analysés. Chaque fois que vous rencontrez un résumé dans votre analyseur, vous ne définissez pas le résumé NSString à la chaîne que vous venez de lire (qui remplace l'ancienne valeur et explique pourquoi vous obtenez uniquement la dernière balise récapitulative). Au lieu de cela, vous le stockez en tant que nouvelle chaîne et ajoutez cette chaîne à votre NSMutableArray. Le problème avec la conception dans le billet de blog que vous avez lié est qu'il utilise keyValueCoding pour définir les propriétés dans l'objet Book et que cela ne facilite pas l'ajout d'éléments à un élément de tableau très bien. Par conséquent, vous devrez inclure une gestion spéciale pour l'élément de résumé dans l'analyseur et ajouter des méthodes à la classe Book qui vous permettent d'ajouter des éléments au tableau de synthèse. Voir this post sur comment faire aussi avec KVC.

+0

beaucoup .. Je vais regarder dans ceci ... il semble prometteur malheureusement je vais devoir lire la clé document de codage pour obtenir une meilleure compréhension je pense;). –

2

Je pense que this est ce que vous devez regarder, vous pouvez saisir la valeur du champ id à partir des attributs et en utilisant cette valeur, l'affecter à une variable que vous pouvez ensuite utiliser.

donc je pourrais avoir quelque chose dans mon didStartElement (où les attributs est une variable déclarée dans l'en-tête):

if([elementName isEqualToString:@"Summary"]){ 
    attributes = attributeDict; 
} 

Alors quelque chose comme ça dans mes foundCharacters:

if([[attributes valueForKey:@"id"] intValue] == 1){ 
    doSomething 
}else if([[attributes valueForKey:@"id"] intValue] == 2){ 
    doSomethingElse 
}... 

et ainsi de suite jusqu'à ce que vous ayez toutes vos données.

N.B. C'est 100% du code non testé mais je suis confiant que cela pourrait fonctionner ...

+0

beaucoup, mais je dois dire, il se sent un peu comme une solution de contournement, je préfère une approche plus efficace si j'apprécie vraiment votre contribution et peut même l'utiliser si l'autre approche me manque. –