Функция RemoveChild (узел XmlNode) не выполнена в C # - PullRequest
3 голосов
/ 06 июля 2010

Когда я пытаюсь удалить некоторые из моих дочерних элементов с помощью 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 используется.

Ответы [ 4 ]

7 голосов
/ 06 июля 2010

Я полагаю, что .RemoveChild удаляет дочерний элемент выбранного вами узла.

Есть ли дочерние элементы под nodeName или это уже лист?

Редактировать:

На самом деле вам нужно удалить ребенка от родителя, попробуйте следующее:

nodeName.parentNode.removeChild(nodeName)
5 голосов
/ 06 июля 2010

Вы пытаетесь удалить узел непосредственно из элемента документа, когда он на самом деле является правнуком элемента документа (или, может быть, просто внуком).RemoveChild работает только при указании прямого дочернего элемента, а не просто любого потомка.

Попробуйте:

nodeName.ParentNode.RemoveChild(nodeName);

(если согласно Adkins существует Remove()'Ответ, это было бы лучше - но я не могу найти такой метод в MSDN.)

3 голосов
/ 06 июля 2010

Вы должны удалить ребенка от непосредственного родителя, а не сверху:

nodeName.ParentNode.RemoveChild(nodeName); 
1 голос
/ 06 июля 2010

Вместо использования .RemoveChild попробуйте просто использовать .Remove Это должно дать вам результат, который вы ищете.

Редактировать ::

Обратите внимание, что это работает, только если вы используете Linq to XML. Тогда вы будете работать с некоторым вариантом XNode и можете просто сказать «бла». Удалите, и это должно сработать. Если вы не используете Linq to XML, я бы посоветовал изучить эту причину, это удивительно.

...