[英]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.