سؤال

والألغام هو سؤال عام حول الممارسات إعراب XML.

ودعونا نقول لدينا وثيقة XML، ونحن نستخدم كسباث للحصول على بعض عقدة من تلك الوثيقة:

XMLNode node1=XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode");

والآن ن يحتوي على البيانات من SomeOtherNode. حدسي أتوقع السطر التالي من التعليمات البرمجية:

XMLNode node2=XMLDoc.SelectSingleNode("/Child");

ولملء NODE2 مع هؤلاء الأطفال من NODE1 التي تسمى "الطفل". ولكن للأسف لا يعمل بهذه الطريقة. يبدأ البحث كسباث من جذر وثيقة، وليس من وجوه XMLNode تم استدعاء عليه. هل هناك أي طريقة للحصول على العمل بالطريقة "بديهية"؟ وهذا من شأنه أن تكون مريحة لنهج العودية أو وجوه المنحى إلى التوزيع.

ولقد حاولت استخدام الكائن XMLPathNavigator ولكنه يعمل بنفس الطريقة. ويبدو أنني يمكن تعيين النص الداخلي من XMLDocumentFragment على النص الداخلي من عقدة معينة، ولكن هذا يبدو وكأنه الازدواجية غير فعالة من البيانات.

وأي أفكار؟

هل كانت مفيدة؟

المحلول

XMLNode node2 = XMLDoc.SelectSingleNode("/Child");

وهذا سوف تختار عنصر يسمى "الطفل" من الجذر (/). لاحظ أن تقوم بتطبيق هذه الدعوة على XMLDoc، <م> لا على Node1، لذلك سوف تكون نسبة إلى جذر الوثيقة. أعتقد أن ما تريده هو:

XMLNode node2 = node1.SelectSingleNode("Child"); // edit: removed slash

ما هو كسباث نسبة إلى العقدة المحددة سابقا، وليس جذر المستند.

وبدلا من ذلك، يمكن أن تفعله:

XMLNode node = XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode/Child")

والتي سوف حدد عقدة الطفل مباشرة.

نصائح أخرى

وأعتقد أنه يجب أن تكون:

XMLNode node2=XMLDoc.SelectSingleNode(".//Child");

و(لاحظ نقطة).

وباستخدام // بدلا من / سوف تطابق كافة العقد مع اسم معين.

و/ يختار من عقدة الجذر

و// يحدد العقد في وثيقة من العقدة الحالية التي تتناسب مع اختيار بغض النظر عن مكان وجودهم

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