XML linq删除包含不相等的工作

时间:2019-04-09 19:30:24

标签: c# xml linq

我需要删除xml中的某些元素。我有一个例外列表,并且我正在使用for loop来尝试删除某些元素,但是在某些情况下,即使我的列表中只有一个对象,我的代码也会删除两个对象。

在我的XElement中,我有一些像这样的元素:

  • japr
  • japrtest
  • jli
  • permtest-integrator
  • permtest-pm
  • permtest-service

在我的exceptionList中,我只有

  • japrtest

例如,在我的第二个exceptionList中,我有:

  • permtest
XElement root = XElement.Load(XML);
IEnumerable<XElement> allActiveUsers = root.Elements("users").Elements("user").Where(user => bool.Parse(user.Element("active").Value) == true);
var duplicatedActiveUsers = from user in allActiveUsers group user by user.Element("email").Value into tmpUser where tmpUser.Count() > 1 select tmpUser.Key.ToString();
IEnumerable<XElement> activeUsers = allActiveUsers.Where(p => duplicatedActiveUsers.Contains(p.Element("email").Value));
Console.WriteLine($"== przed -> {activeUsers.Count()} ==");
foreach (XElement user in activeUsers) Console.WriteLine($"- {user.Element("name").Value}");

var exceptionsUsersOne = new[] { "japrtest" };
for (int i = 0; i < exceptionsUsers.Count(); i++)
{
    activeUsers.Where(p => p.Element("name").Value == exceptionsUsers[i]).Remove();
}

Console.WriteLine($"== po -> {activeUsers.Count()} ==");

当我使用exceptionsUsersOne = new[] { "japrtest" };运行它时 我得到一个列表,其中同时删除了japrtest japr,这不是我想要的行为。

当我使用exceptionsUsersTwo = new[] { "permtest" };时,会得到一个列表,其中仅删除permtest,而permtest-something不受影响。

那么activeUsers.Where(p => p.Element("name").Value == exceptionsUsers[i]).Remove()为什么这样工作?

XML的一部分

<directories>
(...)
</directories>
<users>
    <user>
      <directoryId>32769</directoryId>
      <id>3474722</id>
      <name>japr</name>
      <createdDate>2018-03-13T11:04:16Z</createdDate>
      <updatedDate>2019-03-22T07:48:46Z</updatedDate>
      <active>true</active>
      <firstName>fName</firstName>
      <lastName>lName</lastName>
      <displayName>fName lName</displayName>
      <email>JUser@contoso.pl</email>
    </user>
    <user>
      <directoryId>32769</directoryId>
      <id>4162330</id>
      <name>japrtest</name>
      <createdDate>2018-05-28T05:59:12Z</createdDate>
      <updatedDate>2019-03-06T19:30:57Z</updatedDate>
      <active>true</active>
      <firstName>fName</firstName>
      <lastName>lName</lastName>
      <displayName>fName lName</displayName>
      <email>JUser@contoso.pl</email>
    </user>
</users>
<groups>
(...)
</groups>

0 个答案:

没有答案