ユーザーノードのリストを含むノードと、ユーザーのリストを含むグループを含むノードを含むxmlドキュメントがあります。groupsコレクションに一致するdnがないusersコレクションからすべてのノードを削除したいと思います。
以下の簡略化された構造の例として、すべてのdeleteme、ユーザーノードを削除しようとしています。
<?xml version="1.0" encoding="utf-8"?>
<syncdata >
<users >
<user>
<dn>deleteme1</dn>
</user>
<user>
<dn>deleteme2</dn>
</user>
<user>
<dn>deleteme3</dn>
</user>
<user>
<dn>JohnSmith</dn>
</user>
</users>
<groups>
<group name="group2">
<users>
<user>
<dn>JohnSmith</dn>
</user>
</users>
</group>
<group name="group1">
<users>
<user>
<dn>JohnDoe</dn>
</user>
<user>
<dn>JohnnyMorris</dn>
</user>
</users>
</group>
</groups>
</syncdata>
以下のコードは、syncdata / usersコレクション内のすべてのアイテムを削除します。SQLと同様のことを行う必要があります。
System.Xml.Linq.XDocument xdoc
xdoc.Descendants("users").Where(F => F.Parent.Name == "syncdata").Descendants("user").Where(u => u.Parent.Name == "users").Remove();
これは可能ですか?
var xDoc = XDocument.Load(fname);
HashSet<string> set = new HashSet<string>(xDoc.Root.Element("groups")
.Descendants("dn")
.Select(dn => (string)dn));
foreach (var user in xDoc.Root.Element("users").Elements("user").ToList())
{
if(!set.Contains(user.Element("dn").Value))
user.Remove();
}
var newXml = xDoc.ToString();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加