C#中的LINQ to XML添加,更新,删除 [英] C# Linq to XML add, update, delete
本文介绍了C#中的LINQ to XML添加,更新,删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样的代码
的XElement newClient =新的XElement(客户,
新的XElement(名称cmbClient.Text),
新的XElement(服务,
新的XElement(ServName,cmbService.Text)));
xmlDoc.Add(newClient);
xmlDoc.Save(将Settings.xml);
它创建这个
<?XML版本=1.0编码=UTF-8>?;
<客户与GT;
<客户>
<名称>客户名称和LT; /名称>
<服务及GT;
< ServName>服务名称< / ServName>
< /服务及GT;
< /客户>
< /客户与GT;
如果我再次按Button1的,然后它会创建另一个客户端部分,这是确定的,但我要的是
- 创建一个新的客户端部分,如果它的不可以存在。
- 如果客户端存在,那么添加 ServName它,而不是替换
那些已经拥有。 - 如果服务在客户端上已经存在,则什么也不做,因为已经存在。
任何线索?我开始使用LINQ到XML ...感谢咨询
编辑:!从梅德Dovgopoly和莱昂Newswanger混入答案提供解决方案谢谢两位! :D
XDOC的XDocument = XDocument.Load(将Settings.xml);
VAR的客户=从客户
在xDoc.Root.Elements(客户)
其中client.Element(姓名)。价值== cmbClient.Text
选择客户端;
如果(Clients.Count()0)
{
VAR的客户=
(从客户端xDoc.Root.Elements(客户)
,其中。client.Element(姓名)值== cmbClient.Text
选择客户端)。单();
如果(Client.Element(服务)的元素()计数(EL =方式>。el.Value == cmbService.Text)== 0)
{
Client.Element (服务)加入(新的XElement(ServName,cmbService.Text));
}
}
,否则
{
的XElement newClient =新的XElement(客户,
新的XElement(名,cmbClient.Text)
新的XElement(服务,
新的XElement(ServName,cmbService.Text)));
xDoc.Root.Add(newClient);
}
xDoc.Save(将Settings.xml);
解决方案
您可以使用的XElement。元素(名称)
方法来获取特定元素或 XElement.Elements()
通过所有元素一一列举。
如果(xmlDoc.Elements(客户)。COUNT()== 0)
{
//客户端部分不存在。我们添加新的部分。
的XElement newClient =新的XElement(客户,
新的XElement(名,mbClient.Text),
新的XElement(服务,
新的XElement(ServName cmbService.Text)));
xmlDoc.Add(newClient);
}
,否则//客户端部分存在。
{
//获得<服务与GT;部分
的XElement服务= xmlDoc.Element(客户)元素(服务)。
如果(service.Elements()计数(EL =方式> el.Value == cmbService.Text)== 0)
{
//没有服务与名cmbService.Text。我们添加一个。
service.Add(新的XElement(ServName,cmbService.Text));
}
}
I have this code
XElement newClient= new XElement("Client",
new XElement("Name", cmbClient.Text),
new XElement("Service",
new XElement("ServName", cmbService.Text)));
xmlDoc.Add(newClient);
xmlDoc.Save("Settings.xml");
Which creates this
<?xml version="1.0" encoding="utf-8"?>
<Clients>
<Client>
<Name>Client Name</Name>
<Services>
<ServName>Service Name</ServName>
</Services>
</Client>
</Clients>
If i press again Button1, then It will create another Client section, that's OK but what I want is:
- Create a new Client section if it does not exists.
- If Client exists, then add a ServName to it, instead of replacing what already has.
- If a service already exists on a client, then do nothing, because already exists.
Any clue? I'm starting with linq to xml... thanks in advice!
EDIT: Solution provided by mixin answers from Dmitry Dovgopoly and Leon Newswanger thank you two! :D
XDocument xDoc = XDocument.Load("Settings.xml");
var Clients =
from client in xDoc.Root.Elements("Client")
where client.Element("Name").Value == cmbClient.Text
select client;
if (Clients.Count() > 0)
{
var Client =
(from client in xDoc.Root.Elements("Client")
where client.Element("Name").Value == cmbClient.Text
select client).Single();
if (Client.Element("Services").Elements().Count(el => el.Value == cmbService.Text) == 0)
{
Client.Element("Services").Add(new XElement("ServName", cmbService.Text));
}
}
else
{
XElement newClient = new XElement("Client",
new XElement("Name", cmbClient.Text),
new XElement("Services",
new XElement("ServName", cmbService.Text)));
xDoc.Root.Add(newClient);
}
xDoc.Save("Settings.xml");
解决方案
You can use XElement.Element(name)
method to obtain specific element or XElement.Elements()
to enumerate through all elements.
if (xmlDoc.Elements("Client").Count() == 0)
{
//Client section does not exist. We add new section.
XElement newClient = new XElement("Client",
new XElement("Name", mbClient.Text),
new XElement("Service",
new XElement("ServName", cmbService.Text)));
xmlDoc.Add(newClient);
}
else //Client section exists.
{
//obtain <service> section
XElement service = xmlDoc.Element("Client").Element("Service");
if (service.Elements().Count(el => el.Value == cmbService.Text) == 0)
{
//there is no service with name cmbService.Text. We add one.
service.Add(new XElement("ServName", cmbService.Text));
}
}
这篇关于C#中的LINQ to XML添加,更新,删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文