2013-05-03 4 views
0

Я не знаю, как точно рассказать о моем вопросе, поэтому извиняюсь перед вами. У меня есть файл XML и имеет такие элементы, как в следующем:Looping throught XML-элемент для добавления данных

- <Allow_BenGrade> 
    <Amount BenListID="0">0</Amount> 
    </Allow_BenGrade> 
- <Add_Earnings_NonTaxable> 
    <Amount AddEarnID="0">0</Amount> 
    </Add_Earnings_NonTaxable> 

Я заинтересован в Allow_BenGrade где я могу добавить несколько элементов внутри там. У меня есть список из 3-х элементов, но когда я перебираю цикл, чтобы записать его в файл, он записывает только последний элемент в списке, поэтому вместо 3 элементов внутри Allow_BenGrade, у меня есть один (последний в элементе список). Мой код ниже. Пожалуйста, помогите поблагодарить вас.

var query = from nm in xelement.Elements("EmployeeFinance") 
            select new Allowance { 
            a_empersonalID = (int)nm.Element("EmpPersonal_Id"), 
            a_allbengradeID = (int)nm.Element("Grade_Id") 
          }; 
       var x = query.ToList(); 


       foreach (var xEle in x) 
       { 
        var qryBenListGrade = from ee in context.Employee_Employ 
           join abg in context.All_Inc_Ben_Grade 
           on ee.Grade_Id equals abg.GradeID 
           join abl in context.All_Inc_Ben_Listing 
           on abg.All_Inc_Ben_ListingID equals abl.ID 
           where ee.Employee_Personal_InfoEmp_id == xEle.a_empersonalID && abg.GradeID == xEle.a_allbengradeID && (abl.Part_of_basic == "N" && abl.Status == "A" && abl.Type_of_earnings == 2) 
           //abl.Approved_on !=null && 
           select new 
           { 
             abl.ID, 
             abl.Amount, 
             abg.GradeID, 
             ee.Employee_Personal_InfoEmp_id, 
             abl.Per_Non_Taxable, 
             abl.Per_Taxable 
           }; 
        var y = qryBenListGrade.ToList(); 
        //xEle.a_Amount = 0; 
        foreach (var tt in y) 
        { 
        Debug.WriteLine("amount: " + tt.Amount + " emp id: " + tt.Employee_Personal_InfoEmp_id + " ben list id: " + tt.ID); 
         // xEle.a_Amount = xEle.a_Amount + tt.Amount; 

         var result = from element in doc.Descendants("EmployeeFinance") 
            where int.Parse(element.Element("EmpPersonal_Id").Value) == tt.Employee_Personal_InfoEmp_id 
            select element; 
         foreach (var ele in result) 
         { 
          ele.Element("Allow_BenGrade").SetElementValue("Amount", tt.Amount); 
          //ele.Element("Allow_BenGrade").Element("Amount").SetAttributeValue("BenListID", tt.ID); 
         } 

        } 
        doc.Save(GlobalClass.GlobalUrl); 
       } 

ответ

2

SetElementValue будет, как следует из названия, установите значение Amount элемента ... Вам нужно добавить новый вместо:

ele.Element("Allow_BenGrade").Add(new XElement("Amount", 
             new XAttribute("BenListID", tt.ID), 
             tt.Amount); 

Позвольте мне знать, если это решит это для вас ,

+0

Whoaa .. спасибо мужчина .. это работает. – Dineshp

+0

Добро пожаловать. Вы можете принять ответ, если он решит вашу проблему;) – Tallmaris

+1

да .. мне нужно подождать две минуты .. :) еще раз спасибо – Dineshp

0

The XElement.SetElementValue Method:

Задает значение дочернего элемента, добавляет дочерний элемент, или удаляет дочерний элемент.

также:

Значение присваивается первый дочерний элемент с указанным именем . Если дочерний элемент с указанным именем не существует, добавляется новый дочерний элемент . Если значение равно null, первый дочерний элемент с , указанное имя, если оно есть, удаляется.

Этот метод не добавляет дочерние узлы или атрибуты к указанному дочернему элементу .

Вместо этого вы должны использовать XElement.Add Method.

Смежные вопросы