我不知道如何确切地说出我的问题,所以从前面道歉。我有一个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);
}
答案 0 :(得分:2)
SetElementValue
会设置Amount
元素的值...您需要添加一个新元素:
ele.Element("Allow_BenGrade").Add(new XElement("Amount",
new XAttribute("BenListID", tt.ID),
tt.Amount);
如果能解决这个问题,请告诉我。
答案 1 :(得分:0)
XElement.SetElementValue Method:
设置子元素的值,添加子元素或删除子元素 儿童元素。
此外:
将值分配给具有指定的第一个子元素 名称。如果不存在具有指定名称的子元素,则为新子元素 元素被添加。如果值为null,则第一个子元素为 删除指定的名称(如果有)。
此方法不会将子节点或属性添加到指定的位置 儿童元素。
您应该使用XElement.Add Method代替。