Xelement للحصول على جميع أسماء العقدة الفرعية والقيم
-
28-09-2019 - |
سؤال
أفكر في مقاربة مثل هذا. واسمحوا لي أن أعرف ما إذا كان هذا يمكن أن يعمل بالفعل بهذه الطريقة: للعينة XML:
<Root>
<Node>
<SubEl1>abc</SubEl1>
<SubEl2>def</SubEl2>
<SubEl3>123</SubEl3>
<SubEl4>456</SubEl4>
</Node>
</Root>
تريد الذهاب إلى <Node>
, ، حلقة من خلال التحقق من اسم العقدة/العنصر واحصل على قيمة. شيء من هذا القبيل ، قل أن الاسم هو "subel1" استخدام "ABC" لـ Task1 ، على رؤية اسم العنصر هو "subel2" أفعل Task2. يجب فحص جميع العناصر الفرعية!
مثال (ليس رمز العمل):
//looping through 'Node' children
switch(SubElName for 'Node element)
{
case : 'SubEl1'
//Do Task1 using the SubEl1's value/TextName ...
case: 'SubEl2'
//Task2 ...
...
case: default //Do default task.....
}
//end loop
إذا كنت تستطيع التفكير في أي نهج آخر (xelement ، xmldocument ، selectnodes () وما إلى ذلك ، فسيكون هذا موضع تقدير أيضًا!
المحلول
بالنسبة لهذه المهمة ، يبدو أن كل ما عليك فعله هو ببساطة إنشاء قائمة/قاموس لاسم العقدة وقيمة العقدة ، يمكنك بعد ذلك استخدام ذلك في المحول الخاص بك ....
var list = from x in XElement.Load(**yourxmlfile**).Element("Node").Elements()
select new
{
Name = x.Name,
Value = (string)x
};
الآن لديك قائمة بالاسم ، وأزواج القيمة التي يمكنك ببساطة تمريرها إلى طريقة التبديل.
نصائح أخرى
لم تستفيد منها حتى الآن ، لكن LINQ إلى XML تبدو وكأنها جميع أنواع رائعة. فيما يلي بعض الروابط.مرجع MSDN مدمن مخدرات على linq
استعمال http://msdn.microsoft.com/de-de/library/bb342765.aspx للحصول على جميع الأطفال و http://msdn.microsoft.com/de-de/library/system.xml.linq.xelement.name.aspx للتحقق من الاسم.