كيف يمكنني حل الخطأ "التعبير يجب تقييم إلى عقدة مجموعة" عند التحقق من وجود العقدة؟

StackOverflow https://stackoverflow.com/questions/157044

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا في محاولة للتحقق من وجود عقدة باستخدام رمز. NET التالية:

xmlDocument.SelectSingleNode(
        String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));

وهذا يثير دائما:

<اقتباس فقرة>   

وXPathException: التعبير يجب تقييم إلى عقدة مجموعة.

لماذا أتلقى هذا الخطأ وكيف يمكنني حلها؟ شكرا لك.

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

المحلول

والتعبير نظرا يقيم إلى منطقية، وليس عقدة مجموعة. أفترض أنك تريد أن تحقق ما إذا كان اسم_المشروع يساوي نص parametrized. في هذه الحالة تحتاج إلى كتابة

//ErrorTable/ProjectName[text()='{0}']

وهذا يوفر لك قائمة من كافة العقد (أ nodeset) مطابقة حالة معينة. هذه القائمة قد يكون فارغا، وفي هذه الحالة C # -Expression في عينتك سيعود فارغة.

وكما ثانوي: أنت على يمكن استخدام تعبير XPath الأصلي، ولكن ليس مع SelectSingleNode، ولكن مع تقييم، مثل هذا:

(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));

نصائح أخرى

وجرب:

Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));

if (node != null) {
    // and so on
}

وتحرير: خطأ سخيف

وهذا تعبير XPath يحتوي على خطأ خفية. كان ينبغي أن يكون ذلك:

xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));

والتعبير السابق كان تقييم لمنطقية، وهو ما يفسر خطأ استثناء. شكرا للمساعدة!

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