簡體   English   中英

在C#中從XML添加/刪除元素

[英]Add/Remove elements from XML in C#

我有這個XML:

<states>
<state name="Alaska" colour="#6D7B8D">
<Location Name="loc1">
  <Address>a1</Address>
  <DateNTime>a2</DateNTime>
</Location>
<Location Name="loc2">
  <Address>b1</Address>
  <DateNTime>b2</DateNTime>
</Location>
</state>
<state name="Wyoming" colour="#6D7B8D">
<Location Name="loc3">
  <Address>c1</Address>
  <DateNTime>c2</DateNTime>
</Location>
<Location Name="loc4">
  <Address>d1</Address>
  <DateNTime>d2</DateNTime>
</Location>
</state>
</states>

我需要從狀態添加/刪除位置。 我該怎么做呢? 誰能舉例說明使用Linq嗎?

Linq不處理插入或刪除。

但是您可以同時使用XLinq庫。

var doc = XDocument.Load(fileName);  // or .Parse(xmlText);

var alaska = doc.Root.Elements("state")
       .Where(e => e.Attribute("name").Value == "Alaska").First();

alaska.Add(new XElement("Location", new XAttribute("Name", "someName"), 
       new XElement("Address", ...)));

要添加節點,請搜索要添加到的父元素,創建要添加的元素,然后添加它。

要刪除節點,請搜索要刪除的節點,然后刪除它們。

// load the xml
var doc = XDocument.Load(@"C:\path\to\file.xml");

// add a new location to "Alaska"
var parent = doc.Descendants("state")
    .Where(e => (string)e.Attribute("name") == "Alaska")
    .SingleOrDefault();

if (parent != null)
{
    // create a new location node
    var location =
        new XElement("Location",
            new XAttribute("Name", "loc5"),
            new XElement("Address", "e1"),
            new XElement("DateNTime", "e2")
        );

    // add it
    parent.Add(location);
}

// remove a location from "Wyoming"
var wyoming = doc.Descendants("state")
    .Where(e => (string)e.Attribute("name") == "Wyoming")
    .SingleOrDefault();

if (wyoming != null)
{
    // remove "loc4"
    wyoming.Elements(e => (string)e.Attribute("Name") == "loc4")
           .Remove();
}

// save back to the file
doc.Save(pathToFile);

這是您可以如何執行所要求的示例:

  XElement doc = XElement.Parse("<states><state name=\"Alaska\" colour=\"#6D7B8D\"><Location Name=\"loc1\">  <Address>a1</Address>  <DateNTime>a2</DateNTime></Location><Location Name=\"loc2\">  <Address>b1</Address>  <DateNTime>b2</DateNTime></Location></state><state name=\"Wyoming\" colour=\"#6D7B8D\"><Location Name=\"loc3\">  <Address>c1</Address>  <DateNTime>c2</DateNTime></Location><Location Name=\"loc4\">  <Address>d1</Address>  <DateNTime>d2</DateNTime></Location></state></states>");

   doc.Elements("state")
       .Where(s => s.Attribute("name").Value == "Alaska").Elements("Location")
            .Where(l => l.Attribute("Name").Value == "loc1")
            .First()
            .Remove();

暫無
暫無

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

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