كيف يمكنني حل الخطأ "التعبير يجب تقييم إلى عقدة مجموعة" عند التحقق من وجود العقدة؟
سؤال
وأنا في محاولة للتحقق من وجود عقدة باستخدام رمز. 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));
والتعبير السابق كان تقييم لمنطقية، وهو ما يفسر خطأ استثناء. شكرا للمساعدة!