Если атрибут Name из узлов, которые будут удалены могут быть сопоставлены с помощью простой модели, должно работать:
Dim SchemaDoc As New XDocument(<Root><Group Name="Foo"/><Group Name="Node1"/>
<Group Name="Node2"/><Group name="Bar"/></Root>)
Dim NodesToRemove = From Element In SchemaDoc.<Root>.<Group> Where _
[email protected] Like "NotNode?"
For Each XNode In NodesToRemove.ToArray()
XNode.Remove()
Next
Обратите внимание на использование ToArray() в перечислении NodesToRemove: вам понадобится это, чтобы принудительно оценить XQuery до начала изменения коллекции, на которой она основана.
Если это не сработает, вот альтернатива использованию LINQ (поскольку изначально я думал, что вставка «нет» в запросы LINQ не сработает, но я был настроен прямо на другой ответ - вы узнаете что-то новое каждый день ...):
Dim NodesToRemove As New Collections.ObjectModel.Collection(Of XNode)
For Each Element In SchemaDoc.<Root>.<Group>
If Not BasicGroups.Contains([email protected]) Then
NodesToRemove.Add(Element)
End If
Next
Производительность должна быть в значительной степени идентичной использованию LINQ.
Так что в моем случае ..... Где не базовые группы. Состояния (элемент. @ Name) ... Что работает Великий .. Спасибо. – 2008-10-21 12:14:53
Хорошо, я не был уверен в синтаксисе VB :) – leppie 2008-10-21 12:43:58