我需要删除xml中的某些元素。我有一个例外列表,并且我正在使用for loop
来尝试删除某些元素,但是在某些情况下,即使我的列表中只有一个对象,我的代码也会删除两个对象。
在我的XElement中,我有一些像这样的元素:
在我的exceptionList中,我只有
例如,在我的第二个exceptionList中,我有:
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>