Xelement للحصول على جميع أسماء العقدة الفرعية والقيم

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

سؤال

أفكر في مقاربة مثل هذا. واسمحوا لي أن أعرف ما إذا كان هذا يمكن أن يعمل بالفعل بهذه الطريقة: للعينة 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 للتحقق من الاسم.

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