9
votes

Comment puis-je mettre à jour un xelement spécifique?

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 ) dans ce XML? xxx


0 commentaires

4 Réponses :


1
votes

J'utiliserais xpath pour trouver l'élément que vous recherchiez, puis le manipuler directement.

pour le xpath quelque chose comme // catégorie [itemName = 'stylo] / itemnumber l'élément Pour plus d'informations sur XPath, voir

Le (très basique) Snippet fonctionne pour moi dans mono xxx


0 commentaires

3
votes

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;


2 commentaires

Pourquoi utilisez-vous descendants () si agressivement, où éléments () ferait bien?


Il existe également une méthode SETVALUE () sur un xelement et Xattribute. Doute qu'il y ait une différence.



13
votes
XDocument doc;
...
XElement penItemValue = doc
     .Elements("MyStore")
     .Elements("Category")
     .Elements("itemName")
     .Single(itemName => itemName.Value == "Pen")
     .Parent
     .Element("itemValue");
penItemValue.Value = "123";

2 commentaires

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")



0
votes

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");


1 commentaires

Il a spécifiquement demandé de faire cela pour xelement .