سؤال

عندما أحاول إزالة بعض عناصر طفلي باستخدام 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() موجود وفقًا لإجابة Adkins ، سيكون ذلك أفضل - لكن لا يمكنني العثور على مثل هذه الطريقة في MSDN.)

يجب عليك إزالة الطفل من الوالد المباشر ، وليس من الأعلى:

nodeName.ParentNode.RemoveChild(nodeName); 

بدلاً من استخدام .removechild ، حاول فقط استخدام .Remove الذي يجب أن يمنحك النتيجة التي تبحث عنها.

يحرر::

لاحظ أن هذا يعمل فقط إذا كنت تستخدم LINQ إلى XML. بعد ذلك ، ستعمل مع بعض الاختلافات في Xnode ويمكنك ببساطة أن تقول blah.remove ويجب أن تفعل الخدعة. إذا كنت لا تستخدم LINQ إلى XML ، فإنني أقترح النظر في هذا السبب فهو مذهل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top