簡體   English   中英

如何使用linq to XML將條件節點添加/插入到XML中

[英]how to add/insert conditional node into XML using linq to XML

我生成了一個像這樣的xml文件:

 XElement employees =
        new XElement("Work",
           new XElement("record",
              new XElement("Name", textBox1.Text),
              new XElement("Phone", "206-555-0144"),
              new XElement("Address",
                    new XElement("Street1", "123 Main St"),
                    new XElement("City", "Mercer Island"),
                    new XElement("State", "WA"),
                    new XElement("Postal", "68042")
             )),
             new XElement("record",
              new XElement("Name", "22222"),
              new XElement("Phone", "353245345"),
              new XElement("Address",
                    new XElement("Street1", "sdfain St"),
                    new XElement("City", "asdf Island"),
                    new XElement("State", "QLD"),
                    new XElement("Postal", "54322")
              )),
              new XElement("record",
              new XElement("Name", "Peter"),
              new XElement("Phone", "1234"),
              new XElement("Address",
                    new XElement("Street1", "sd St"),
                    new XElement("City", "cbr"),
                    new XElement("State", "act"),
                    new XElement("Postal", "2600")
              )
          )
      );

后來我希望根據條件(其中name =“peter”)在父節點“record”下添加新的子節點,如下所示:

empFile.Elements().Where(r => (string)r.Element("Name") == "Peter")
                  .Add(new XElement("record",
                           new XElement("Mobile", "3253425"),
                           new XElement("Work", 999999)
                       ));

我怎樣才能做到這一點?

除了Tim建議使用Where后跟SingleFirst ,還值得知道那些已經采用謂詞的方法存在重載。 例如:

empFile.Elements()
       .Single(r => (string) r.Element("Name") == "Peter")
       .Add(...);

你幾乎就在那里,你的Where子句返回一個IEnumerable<XElement>而不是一個XElement,所以你只需要修復它,即調用.Single()或.First()等

例如:

XElement xe = empFile.Elements().Where(r => (string)r.Element("Name") == "Peter").Single();

xe.Add(new XElement("record", new XElement("Mobile", "3253425"), new XElement("Work", 999999)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM