Мне нужно удалить XElement
из XDocument
.Удалить XElement из другого XDocument
Проблема в том, что я не могу просто использовать .Remove()
, потому что мой XDocument
- это не то же самое, что и XElement
.
Очень важный факт - производительность.
Сценарий: У меня есть XDocument docSource
, и я копирую его до XDocument doc
. Я выбираю узел docSource
и хочу удалить этот узел в моем doc
.
До сих пор я использую этот обходной путь (который также может удалить некоторые неправильные узлы, если они получили такое же название родительского, но это не имеет значения до сих пор):
private static XNode actualNode;
private static void RemoveNode(XDocument doc)
{
doc.Root.Descendants(((XElement)actualNode).Name.LocalName)
.Where(e => actualNode.Parent.Name.LocalName.Equals(e.Parent.Name.LocalName))
.Remove();
}
Есть ли лучший способ сделай это? И особенно более быстрый способ? Мой XDocument имеет 1000 строк.
Проблема с производительностью: Да, если я просто не использую этот единственный метод, то мое исполнение работает от 700 мс до 200 мс, поэтому эта линия потребляет огромную производительность. – WhileTrueSleep
@WhileTrueSleep: Кажется немного странным, если это действительно всего 1000 строк. Это определенно не компиляция JIT и т. Д.? Я действительно не ожидал, что ваш текущий код вызовет проблему, хотя код, который я дал, может все равно работать лучше. –
Вы правы, показанный код не был проблемой. В рекурсии был ошибочный подход, называемый методом 100.000 раз. – WhileTrueSleep