代码之家  ›  专栏  ›  技术社区  ›  paradisonoir

如何更新特定Xelement?

  •  8
  • paradisonoir  · 技术社区  · 15 年前

    更新Xelement的最佳方法是什么( 更新元素笔的itemNumber值 在这个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>
    
    4 回复  |  直到 15 年前
        1
  •  12
  •   Pavel Minaev    15 年前
    XDocument doc;
    ...
    XElement penItemValue = doc
         .Elements("MyStore")
         .Elements("Category")
         .Elements("itemName")
         .Single(itemName => itemName.Value == "Pen")
         .Parent
         .Element("itemValue");
    penItemValue.Value = "123";
    
        2
  •  3
  •   womp    15 年前

    您可以找到它并使用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;
    
        3
  •  1
  •   Andrew Cox    15 年前

    我将使用xpath找到您要查找的元素,然后直接操作它。

    对于xpath类似 //Category[itemName='Pen']/itemNumber 会找到元素 for more on Xpath see

    以下(非常基本)片段对我来说是单声道的

    using System.Xml;
    
    namespace test
    {
    
      class myclass
      {
    
      public static void Main(string[] argv)
      {
        XmlTextReader reader = new XmlTextReader(argv[0]);
        XmlDocument doc = new XmlDocument(); 
        doc.Load(reader);
        reader.Close();          
        XmlNode myNode;
        XmlElement root = doc.DocumentElement;
        myNode = root.SelectSingleNode("//Category[itemName='Pen']/itemNumber");
    
        myNode.InnerText = "18";
    
        doc.Save(argv[1]);
      }
    }
    }
    
        4
  •  0
  •   steamer25    15 年前

    使用xpath(大多数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");