循环遍历XML元素以添加数据

本文关键字:添加 数据 元素 遍历 XML 循环 | 更新日期: 2023-09-27 18:12:12

我不知道如何准确地表达我的问题,所以首先道歉。我有一个xml文件,它有如下元素:

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

我对Allow_BenGrade感兴趣,我可以在那里添加多个元素。我有3个项目的列表,但是当我循环将其写入文件时,它只写入列表中的最后一个项目,所以不是在Allow_BenGrade中有3个元素,而是最终有一个(项目列表中的最后一个)。我的代码如下。请帮忙,谢谢。

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);
                }

循环遍历XML元素以添加数据

SetElementValue,顾名思义,将设置Amount元素的值…你需要添加一个新的:

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

XElement。SetElementValue方法:

设置子元素的值、添加子元素或删除元素

子元素。

:

该值被赋给第一个具有指定元素的子元素名字如果不存在具有指定名称的子元素,则创建一个新的子元素元素被添加。如果值为空,则第一个子元素为指定的名称(如果有)将被删除。

此方法不将子节点或属性添加到指定的

子元素。

应该使用XElement。