Я столкнулся с уникальной ситуацией, когда мне нужно удалить XElement из XDocument, но значение для родительского узла установлено равным нулю, поэтому при вызове fragment.Remove() я получаю сообщение об ошибке SystemInvalidOperation, говорящее, что «родительский пропал, отсутствует'.
Я просматриваю файл .wxs, который загружается в XDocument, и в этом файле есть корень Wix и узлы XPProcessingInstruction, содержащие вложенные XElements, содержащие коллекцию DescendantNodes().
<Wix>
<?if condition ?>
<Fragment>
....
</Fragment>
<?endif?>
</Wix>
Сначала я попытался удалить <?if condition ?> и <?endif?>, что работает, потому что <Wix> является их родительским узлом, но я продолжаю получать сообщение об ошибке для <Fragment> независимо от того, удаляю ли я его до или после XPProcessingInstructions.
Как правильно удалить элемент фрагмента?
Wix также является родительским узлом фрагмента.
Wix является родительским узлом фрагмента, но в отладчике Visual Studio он не показывает Wix в качестве значения родительского свойства.
@DarthVeyda проблема заключалась в том, что я анализировал текущий итерируемый элемент и сохранял его в XElement, поэтому значение родительского свойства оказалось нулевым





Я не вижу твоей проблемы. Рассмотреть возможность:
<?xml version = "1.0" encoding = "utf-8"?>
<Wix xmlns = "http://schemas.microsoft.com/wix/2006/wi">
<?if condition ?>
<Fragment></Fragment>
</Wix>
Этот код:
XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
string xmlTest = File.ReadAllText("test.wxs");
XDocument doc = XDocument.Parse(xmlTest);
doc.Descendants(ns + "Fragment").First().Remove();
Console.WriteLine(doc.ToString());
Выходы:
<Wix xmlns = "http://schemas.microsoft.com/wix/2006/wi">
<?if condition ?>
</Wix>
проблема заключалась в том, что я анализировал и сохранял текущий повторяющийся элемент в другой переменной XElement, поэтому родительское значение было нулевым. Когда я сделал .Remove() для временной переменной в цикле foreach, она была удалена без проблем.
Не могли бы вы опубликовать код, который выполняет удаление?