التحقق من وجود XElement لواحد من عدة عناصر XElements المحتملة

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

  •  05-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة لتحديد ما إذا كان XElement يحتوي على أحد العناصر المحددة؟على سبيل المثال، لدي XElements التي أريد التحقق منها:

Dim xe1 = <color><blue/></color>
Dim xe2 = <color><red/></color>
Dim xe3 = <color><powderBlue/></color>
Dim xe4 = <color><aqua/></color>
Dim xe5 = <color><green/></color>

أود أن أكون قادرًا على الاستعلام عن أي من عناصر xelements لمعرفة ما إذا كانت تحتوي على العناصر <red/>, <green/> أو <blue/> أسفل منهم والعودة صحيحا إذا كان الأمر كذلك، كاذبا إذا لم يكن كذلك.

كنت آمل أن يكون الأمر أبسط، ولكن أفضل ما يمكن أن أتوصل إليه هو:

Dim primaryColor = From e In xe1.Elements Where e.Name = "blue" Or e.Name = "red" Or e.Name = "green"
Dim primaryColorTrue = primaryColor.SingleorDefault
If primaryColorTrue IsNot Nothing Then
'Blah
End If

هل لدى أي شخص طريقة أفضل للقيام بذلك، مثل وضع عناصر xelements من الأحمر/الأخضر/الأزرق في مصفوفة واستخدام شيء مثل Elements.Contains(قائمة العناصر)؟

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

المحلول

إذا فهمت بشكل صحيح - ربما (باستخدام C#، آسف - ولكن لا يوجد منطق حقيقي محدد لـ C# هنا):

var colors = new[] {"red", "green","blue"};
bool any = el.Descendants().Any(child => colors.Contains(child.Name.LocalName));

حتى لو حاربك VB، فأنا متأكد من أنه يمكنك استخدامه .Any بدلاً من .SingleOrDefault و أ null يفحص.

للحصول على معلومات، باستخدام عناصر هنا تبدو لي فكرة غريبة؛أود فقط أن يكون اسم اللون كما نص إذا كان ذلك ممكنا:

<somexml><color>blue</color></somexml>

أو حتى كخاصية:

<somexml color="blue"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top