2010-05-25 7 views
0

sont bloqués depuis plusieurs jours maintenant. Comment faire pour boucler chaque nœud dans un document XML et modifier la valeur de texte du nœud.Comment boucler des nœuds à l'aide de NSXML sur le Mac et modifier la valeur de texte de chaque nœud

Par exemple passer de ceci:

<root> 
    <node1>some text</node1> 
    <node2> 
     <node3>some more text</node3> 
    </node2> 
</root> 

à quelque chose comme:

<root> 
    <node1>updated text</node1> 
    <node2> 
    <node3>updated text</node3> 
    </node2> 
</root> 

Le code que j'ai cela ne fonctionne pas est:

NSArray *nodes = [xmlDoc nodesForXPath:@"//*"]; 

for (NSXMLElement *node in nodes) { 
    //In time a function call will go here to change the text: 
    NSString *newVal = @"updated text"; 
    [node setStringValue:newVal]; 
} 

Bien qu'il semble boucle ok quand je vérifie le contenu de XMLDoc il a alors ceci dedans:

<root> 
    updated text 
</root> 

S'il vous plaît aidez-moi si vous le pouvez J'ai essayé plusieurs fois google recherches et je tire mes cheveux (déjà amincissement) - sûrement cela devrait être assez simple ?!

Matt.

Répondre

0

C'est votre expression xpath. //* sélectionne tous les nœuds du document, y compris le nœud racine. Ainsi, à un certain moment de l'itération, vous définissez la valeur de chaîne du nœud racine qui efface apparemment tous ses nœuds enfants précédents.

Je ne suis pas un expert en XPath, mais quelque chose comme:

/root//* 

pourrait faire l'affaire, sauf que node3 vont être écrasées pour les mêmes raisons. Si vous regardez The XPath tutorial, il devrait y avoir un moyen de sélectionner tous les nœuds de texte.

+0

Merci Jeremy - Je vais essayer et poster des résultats. – ar77