فشلت دالة removechild (عقدة xmlnode) في 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()
موجود وفقًا لإجابة Adkins ، سيكون ذلك أفضل - لكن لا يمكنني العثور على مثل هذه الطريقة في MSDN.)
يجب عليك إزالة الطفل من الوالد المباشر ، وليس من الأعلى:
nodeName.ParentNode.RemoveChild(nodeName);
بدلاً من استخدام .removechild ، حاول فقط استخدام .Remove الذي يجب أن يمنحك النتيجة التي تبحث عنها.
يحرر::
لاحظ أن هذا يعمل فقط إذا كنت تستخدم LINQ إلى XML. بعد ذلك ، ستعمل مع بعض الاختلافات في Xnode ويمكنك ببساطة أن تقول blah.remove ويجب أن تفعل الخدعة. إذا كنت لا تستخدم LINQ إلى XML ، فإنني أقترح النظر في هذا السبب فهو مذهل.