C#中的LINQ to XML添加,更新,删除 [英] C# Linq to XML add, update, delete

查看:396
本文介绍了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的,然后它会创建另一个客户端部分,这是确定的,但我要的是




  1. 创建一个新的客户端部分,如果它的不可以存在。

  2. 如果客户端存在,那么添加 ServName它,而不是替换
    那些已经拥有。

  3. 如果服务在客户端上已经存在,则什么也不做,因为已经存在。



任何线索?我开始使用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:

  1. Create a new Client section if it does not exists.
  2. If Client exists, then add a ServName to it, instead of replacing what already has.
  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆