2009-08-06 8 views
1

J'ai une question à propos d'un fichier xml de base que je suis en train d'analyser et de mettre simplement dans nextlines (Entrées). Je vais essayer d'expliquer mon problème avec cet exemple suivant. Je suis (toujours) en train de construire un arbre xml et tout ce qu'il a à faire (ceci est un testtree) est de mettre le résumé dans une liste d'items. Je l'exporte ensuite à une plist afin que je puisse voir si tout est fait correctement.le caractère suivant a une énorme influence sur xmlparser?

Une méthode qui fait cela est dans l'analyseur qui ressemble à ce

if([elementName isEqualToString:@"Book"]) { 
[appDelegate.books addObject:aBook]; 

[aBook release]; 
aBook = nil; 
} 
else 
{ 
[aBook setValue:currentElementValue forKey:elementName]; 
NSString *directions = [NSString stringWithFormat:currentElementValue]; 
[directionTree = setObject:directions forKey:@"directions"]; 
} 
[currentElementValue release]; 
currentElementValue = nil; 
} 

l'exportation pour le plistfile arrive au ENDTAG des livres.

Ci-dessous est la première xmlfile

<?xml version="1.0" encoding="UTF-8"?> 
<Books><Book id="1"><summary>Ero adn the ancient quest to measure the globe.</summary></Book><Book id="2"><summary>how the scientific revolution began.</summary></Book></Books> 

Ceci est ma sortie

http://img139.imageshack.us/img139/9175/picture6rtn.png

Si je fais quelques ajustements comme ici

<?xml version="1.0" encoding="UTF-8"?> 
<Books><Book id="1"> 
<summary>Ero adn the ancient quest to measure the globe.</summary> 
</Book> 

<Book id="2"> 
<summary>how the scientific revolution began.</summary> 
</Book> 
</Books> 

Mes directions clés avec des restes de chaîne de type vide ...

http://img248.imageshack.us/img248/5838/picture7y.png

Je ne savais pas que si je viens de mettre dans un entrer aurait une telle influence. Est-ce que quelqu'un sait une solution à cela puisque mon vrai fichier xml ressemble à ceci.

ps. la chose amusante est que je peux réellement voir (lors du débogage) ma chaîne de directions (directions NSString) remplir avec currentElementValue dans tous les deux cas.

Répondre

1

Instrument votre code; Plus précisément, juste au-dessus de la ligne qui lit ...

[directionTree setObject:directions forKey:@"directions"]; 

... (j'ai enlevé un chien errant =) essayez d'ajouter ...

NSLog(@"setting directions to '%@'", directions); 

Je parie que vous verrez ci-dessus est connecté plusieurs fois par élément. Plus précisément, la nouvelle ligne entre le </summary> et le </book> est, en soi, un élément tout comme le texte de la balise < summary> </summary> est un élément. Maintenant, vous pourriez continuer sur la voie d'essayer un cas spécial pour cela et l'autre, mais ce serait faux.

Vous devez analyser le document XML en tant que document structuré - sous la forme d'un arbre de nœuds. Plus précisément, vous devriez rechercher le tag résumé> < quelque part, puis saisir l'élément qui se trouve en dessous (qui devrait être de, IIRC, le type de texte dans le langage XML - été un certain temps).

Ou, mieux encore, utilisez l'une des API d'analyse XML sur le système. NSXMLDocument vient immédiatement à l'esprit. Si vous travaillez sur l'iPhone (que cette question n'a pas indiqué), vous devrez utiliser NSXMLParser et non NSXMLDocument car il n'est pas disponible.

Ou, encore mieux, puisque cela ressemble à l'encapsulation XML assez simple d'un schéma de données régulier, utilisez CoreData. CoreData est idéal pour stocker ce type d'informations. Si votre XML est destiné à être un format d'échange, vous ne voudrez pas utiliser CoreData car le XML qu'il produit est entièrement de sa propre conception.

+0

thnx pour la réponse .., en effet le "=" était juste une faute de frappe;). Donc vous dites que la nouvelle ligne est un élément tout comme le texte .. mmmok qui a du sens en effet. Donc, si je suis correct au lieu d'utiliser la balise Book, je devrais utiliser la balise summary à la place. J'utilise l'analyse xml pour iPhone et cela signifie: "L'iPhone ne supporte que NSXMLParser et pas NSXMLDocument" Je suis encore nouveau sur iPhone sdk et j'ai vu quelque chose à propos de coredata et j'espérais pouvoir l'éviter;) et le garder simpeler;). Mais merci beaucoup pour la réponse que je vais vérifier et voir ce que je peux faire avec. –

+0

Yah-- right - NSXMLDocument est juste dans le contexte de l'iPhone. La clé, cependant, est que vous devez traiter le document comme l'arbre des nœuds et non comme un flux de texte. – bbum

Questions connexes