J'écris un programme en C# qui va passer par un tas de fichiers config.xml et mettre à jour certains éléments, ou les ajouter s'ils n'existent pas. J'ai la partie vers le bas qui met à jour un élément si elle existe avec ce code:Dupliquer des éléments lors de l'ajout de XElement à XDocument
XDocument xdoc = XDocument.Parse(ReadFile(_file));
XElement element = xdoc.Elements("project").Elements("logRotator")
.Elements("daysToKeep").Single();
element.Value = _DoRevert;
Mais je suis en cours d'exécution sur des questions quand je veux ajouter un élément qui n'existe pas. La plupart du temps, une partie de l'arbre est en place et quand j'utilise mon code, il ajoute un autre arbre identique, ce qui fait exploser le programme qui lit le xml.
voici comment je tente de le faire
xdoc.Element("project").Add(new XElement("logRotator", new XElement("daysToKeep", _day)));
et que les résultats dans une structure comme celui-ci (La balise numToKeep était déjà là):
<project>
<logRotator>
<daysToKeep>10</daysToKeep>
</logRotator>
<logRotator>
<numToKeep>13</numToKeep>
</logRotator>
</project>
mais ce que je veux
<project>
<logRotator>
<daysToKeep>10</daysToKeep>
<numToKeep>13</numToKeep>
</logRotator>
</project>
C'est ce que je pensais, mais quelques fois l'arbre est plus profond et il peut parfois être « coupé » à différentes longueurs et je voudrais juste présumez pas écrire un cas pour chaque possibilité. – Andy
@Andy: Pouvez-vous ajouter une requête xpath pour obtenir tous vos objets logRotator en même temps ... puis vérifiez s'ils ont les enfants daysToKeep et numToKeep ... sinon ... ajoutez-les. Si oui ... passez au logRotator suivant. – Scott
@Scott: Son code (et notre) utilise la méthode '.Element()' qui obtient le premier élément, donc nous pouvons supposer qu'il ne s'agit que d'un seul élément. – Codesleuth