Quel est le meilleur moyen de mettre à jour un xelement ( mettre à jour la valeur de l'élément Numéro d'élément stylo d'élément strong>) dans ce XML?
4 Réponses :
J'utiliserais xpath pour trouver l'élément que vous recherchiez, puis le manipuler directement.
pour le xpath quelque chose comme Le (très basique) Snippet fonctionne pour moi dans mono p> // catégorie [itemName = 'stylo] / itemnumber code> l'élément
Pour plus d'informations sur XPath, voir P>
Vous pouvez le trouver et la mettre à jour à l'aide de LINQTOXML:
XElement root = XElement.Load("myXml.xml");
var penCategory = from category in root.Descendants("Category")
where category.Element("itemName") != null
&& category.Element("itemName").Value == "Pen"
select category;
penCategory.Element("itemName").Value = updatedValue;
Pourquoi utilisez-vous descendants () code> si agressivement, où éléments () code> ferait bien?
Il existe également une méthode SETVALUE () sur un xelement et Xattribute. Doute qu'il y ait une différence.
XDocument doc;
...
XElement penItemValue = doc
.Elements("MyStore")
.Elements("Category")
.Elements("itemName")
.Single(itemName => itemName.Value == "Pen")
.Parent
.Element("itemValue");
penItemValue.Value = "123";
J'ai un problème d'éléments et d'éléments. Quand c'était des éléments, cela m'a donné un résultat nul pour le XML ci-dessus, mais j'ai suivi votre approche et l'ai eu.
Excellente réponse! Quelques points que je devais faire était de référence System.Linq et System.LinqExpressions dans mon projet. En outre, l'équivalent VB.NET de l'instruction .Single (xxx) est: .single (fonction (itemName) itemName.value = "stylo")
Utiliser XPath (qui sera familier à la plupart des Devs XML):
var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<MyStore>
<Category>
<itemName>Pen</itemName>
<itemNumber>12</itemNumber>
</Category>
<Category>
<itemName>Paper</itemName>
<itemNumber>23</itemNumber>
</Category>
</MyStore>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var nav = doc.CreateNavigator();
var iter = nav.Select("/MyStore/Category[itemName='Pen']/itemNumber");
iter.MoveNext();
iter.Current.SetValue("42");
Il a spécifiquement demandé de faire cela pour xelement code>.