Функция removeChild (xmlnode node) не удалась в C#
-
02-10-2019 - |
Вопрос
Когда я пытаюсь удалить часть моего детского элемента с помощью RemoveChild (). Но бросьте исключение. Я прикрепил свой код ниже.
nodeName = doc.SelectSingleNode("//Equipment//DataCollections//EnabledIDs//MyID[@id='" + attrValue + "']");
// Found the nodeName successfully druing run time.
doc.DocumentElement.RemoveChild(nodeName);
// faild to Remove the node
Показать ошибку ниже:
An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll
Additional information: The node to be removed is not a child of this node.
Как я могу удалить узел?
Обновлять
VS2005 & .NET 2.0 Используется.
Решение
Я считаю, что. Removechild удаляет ребенка выбранного узела.
Есть ли дети под nodeName
или это уже лист?
Редактировать:
На самом деле вам нужно снять ребенка родителя, попробуйте следующее:
nodeName.parentNode.removeChild(nodeName)
Другие советы
Вы пытаетесь удалить узел непосредственно из элемента документа, когда на самом деле это правнук элемента документа (или, может быть, просто внук). RemoveChild
работает только тогда, когда вы указываете непосредственный Ребенок, а не просто потомки.
Попробуй это:
nodeName.ParentNode.RemoveChild(nodeName);
(Если Remove()
Существует в соответствии с ответом Адкинса, это было бы лучше, но я не могу найти такой метод в MSDN.)
Вы должны снять ребенка с непосредственного родителя, а не сверху:
nodeName.ParentNode.RemoveChild(nodeName);
Вместо использования .RemoveChild попробуйте просто использовать .Remove, который должен дать вам результат, который вы ищете.
Редактировать::
Обратите внимание, что это работает только в том случае, если вы используете LINQ для XML. Тогда вы будете работать с некоторыми вариациями Xnode и можете просто сказать Blah.remove, и это должно сделать свое дело. Если вы не используете LINQ для XML, я бы посоветовал изучить это, потому что это удивительно.