لماذا لا يعمل هذا الاستعلام xelement على XML
-
18-09-2019 - |
سؤال
يشبه XML الخاص بي:
<nodes>
<node name="somekey">
<item name="subject">blah</item>
<item name="body">body</item>
</node>
</nodes>
والرمز الخاص بي حتى الآن هو:
XDocument doc = XDocument.Load(HttpContext.Current.Server.MapPath(String.Format("~/files/{0}/text.xml", "en")));
if (doc != null)
{
XElement element = doc.Elements().Where(e => e.Elements().Any() && e.Attribute("name").Value == "someKey").First();
}
أحصل على خطأ يقول:
Sequence contains no elements
هو خطأ بلدي خطأ؟
دخلت الرمز، وأخطاء في الخط مع Xelement ..
المحلول
تريد شيئا مثل هذا:
var element = doc.Descendants("node").Where(x => x.Attribute("name") != null && x.Attribute("name").Value == "somekey").FirstOrDefault();
يحرر: تم تحريره للاستيلاء على العنصر الأول من النتيجة؛
نصائح أخرى
يمكنك أيضا استخدام:
var element = doc.Elements()
.Elements()
.Where(e => (e.Elements().Any()
&& e.Attribute("name").Value == "somekey"))
.First();
تفسير:
ال doc.Elements()
الاستيلاء على عنصر الجذر، وهو nodes
. وبعد ثم .Elements()
يختار عناصر الطفل من ذلك، وهو واحد فقط، node
. وبعد ال .Where()
ثم يتم تنفيذها على تلك العصيدة، وهو ما تريد. يختار LambDA تلك العناصر التي تحتوي على عناصر أطفال، ولديها أيضا سمة "اسم" بقيمة "قنصر".
الكود الأصلي الخاص بك لم يكن الحصول على عناصر الأطفال. ومن هنا كانت مجموعة النتائج الأصلية فارغة.
يمكنك أيضا القيام بذلك .Descendants()
ولكن هذا شعور قذرة قليلا وفقدان بالنسبة لي.
لا تنتمي إلى StackOverflow