从XML文件添加/删除元素

时间:2014-01-30 11:03:16

标签: c# .net-4.0

我有一个具有以下结构的XML文件

<Users>
  <User>
    <ID>ABCD321</ID>
    <Name>Mike John</Name>
    <Modification>29/01/2014 16:05:34</Modification>
    <LDAP-Groups>
      <group Name="DOM_CLAS_48" />
    </LDAP-Groups>
  </User>
  <User>
    <ID>AXSD399</ID>
    <Name>Tamy Peters</Name>
    <Modification>29/01/2014 16:05:34</Modification>
    <LDAP-Groups>
      <group Name="DOM_SAP_208" />
      <group Name="DOM_SAP_201" />
      <group Name="DOM_SAP_263" />
    </LDAP-Groups>
  </User>
</Users>

我希望能够添加/删除特定的LDAP-GROUP示例:从ID为<group Name="DOM_SAP_201" />的用户中删除<ID>AXSD399</ID>,并将<group Name="DNS_SAP_999" />添加到拥有该ID的用户<ID>ABCD321</ID>

到目前为止我尝试了什么:

public static void UpdateLDAP(string filename, string userId)
        {
            XDocument xdoc = XDocument.Load(filename);
            XElement user = (from xml2 in xdoc.Descendants("User")
                             let xElement = xml2.Element("LDAP-Groups")
                             where 
                             (from xml3 in xdoc.Descendants("User") 
                              let xUser = xml3.Element("ID")
                                  where xUser.Value == userId.ToUpper())
                              select xElement).FirstOrDefault();

            //........ 
        }

1 个答案:

答案 0 :(得分:1)

您可能首先获得给定用户的所有组,然后更新您的XML(说实话我不知道如何更新它)

public static List<string> GetGroupsForGivenUser(XDocument xdoc, string userId)
        {
            var users = (from user in xdoc.Descendants("User")
                         let xElement = user.Element("ID")
                         where xElement != null && xElement.Value == userId.ToUpper()
                         select new
                         {
                             Id = xElement.Value,
                             Ldap = user.Elements("LDAP-Groups")

                         }).ToList();

            return (
                    from user in users
                    from ldaps in user.Ldap
                    from ldap in ldaps.Elements("Group")
                    select ldap.Value
                ).ToList();
        }