2010-09-09 29 views
1

Je navigue dans un document XML avec XPathNodeIterator et je souhaite modifier les valeurs de certains nœuds. Je ne peux pas comprendre comment :(Comment est-ce que je modifie la valeur de noeud en itérant avec XPathNodeIterator?

Voici le code que je utilise:

XPathDocument docNav = new XPathDocument(path); 

XPathNavigator nav = docNav.CreateNavigator(); 
nav.MoveToRoot(); 

XPathNodeIterator itemsIterator = nav.Select("/foo/bar/item"); 
while (mediumsIterator.MoveNext()) 
{ 
    XPathNodeIterator subitemsIterator = itemsIterator.Current.Select("SubitemsList/name"); 
    while (subitemsIterator.MoveNext()) 
    { 
     XPathNodeIterator nodesIterator = itemsIterator.Current.Select("Param"); 
     nodesIterator.MoveNext(); 
     String the_params = nodesIterator.Current.Value; 

     // check if I need to modify nodesIterator.Current.Value 
     // ... 
     // ok I do - how? 
    } 
} 

Et l'exemple de fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<foo> 
    <bar> 
    <item> 
     <Param /> 
     <SubitemsList> 
     <name>name one</name> 
     <name>name two</name> 
     ... 
     </SubitemsList> 
    </item> 
    ... 
    </bar> 
</foo> 

Ou peut-être il y a une meilleure façon de faire ? ce

+0

ne s'il vous plaît ne pas mettre les balises dans le titre. Je les ai enlevés pour vous. – Robaticus

+0

@Robaticus, thnx, désolé – flamey

+0

Ne vous inquiétez pas pour ça. Ce n'est pas beaucoup d'effort pour changer. – Robaticus

Répondre

0

J'ai trouvé un moyen:

  1. Remplacer XPathDocument avec XmlDocument
  2. Quand je reçois au nœud nécessaire

...

XmlNode node = ((IHasXmlNode)nodesIterator.Current).GetNode(); 
node.InnerText = "new text";