J'ai un XML comme suit.Mise à jour de l'attribut enfant d'un XElement (ou d'un XElement cloné)
<AFConfig>
<Geographies>
<Geography id="Place1" description="NicePlace">
<MetaData>
<Services>
<Service>
...
...
</Service>
</Services>
</MetaData>
<Systems>
<DefaultSystem systemName="SYSONE" server=http"//192.168.0.0" />
</Systems>
</Geography>
<Geographies>
</AFConfig>
Ce que je veux faire est ceci.
- Clone l'élément Géographie et l'ajouter comme Sibling (c.-à-enfant à Géographies)
- Mise à jour "id", "description" avec de nouvelles valeurs ET
- mise à jour du SystemName avec la nouvelle valeur
Mon code.
XDocument xd_Document = XDocument.Load(s_FileName);
XElement xe_Element = (from xe in xd_Document.XPathSelectElements(s_Element)
where xe.Attribute(s_IdAttr).Value == s_Value
select xe).SingleOrDefault();
XElement xe_NewElement = CloneElement(xe_Element)
foreach(KeyValuePair<string, string> s in d_AttrValue)
xe_NewElement.Attribute(s.Key).Value = d_AttrValue[s.Key];
xe_Element.Parent.Add(xe_NewElement);
xd_Document.Save(s_destFileName);
Je passe à cette méthode, les paramètres suivants chaîne s_FileName, s_destFileName chaîne, s_Element chaîne, chaîne s_IdAttr, chaîne s_Value, Dictionnaire d_AttrValue
Avec ce code, je suis en mesure de modifier l'identifiant et la description les attributs.
Question: Comment vais-je modifier l'attribut DefaultSystem systemName avec une valeur? NB: J'ai le même code pour la modification de l'élément existant sans la création du nouvel élément. Encore une fois, je rencontre le même problème. Une solution générique serait préférée.
Andy: Merci. Mais, mon code fait partie d'une fonction. Et je préférerais ne pas coder en dur les noms des éléments enfants. Existe-t-il un moyen générique de résoudre ce problème? – Kanini
J'ai modifié ma réponse pour inclure une solution plus générique. Bien que ce ne soit pas joli, il doit y avoir une meilleure solution. –
Andy: Le morceau de code édité ci-dessus vient avec une erreur de Utiliser le type générique 'System.Collections.Generic.IEnumerable' requiert des arguments de type '1' –
Kanini