我正在尝试从XML文件中获取特定的员工ID,以便我可以查找员工与之关联的一些组,然后将这些组作为元素添加到XML中。
首先,我需要employeeId,然后我可以查找一些信息,我不知道如何获得它。由于所有嵌套节点,我猜我没有得到它。
这是XML结构。
<CXIXML>
<Directives>
<Updates>
<Emp tasEmpID="00123" lName="Doe" fName="John" empStatus="A" city="HDQ" />
<Emp tasEmpID="00456" lName="Smith" fName="Jane" empStatus="A" city="HDQ" />
</Updates>
</Directives>
</CXIXML>
这是我尝试的但我没有得到身份证。
private static void SetGroupAssociations(string xmlFile)
{
XElement xelement = XElement.Load(xmlFile);
IEnumerable<XElement> employees = xelement.Elements();
foreach (var employee in employees)
{
var employeeId = from e in employee.Descendants("Emp")
select new
{
Id = e.Element("tasEmpID")
};
Console.WriteLine(employeeId);
}
}
最终我需要得到以下内容。因此,关于如何在特定员工节点之后添加新元素的任何建议都会很棒,但首先我至少得到了员工,以便我可以查找他们的小组。
<CXIXML>
<Directives>
<Updates>
<Emp tasEmpID="00123" lName="Doe" fName="John" empStatus="A" city="HDQ" />
<Group groupId="1">
<Group groupId="5">
<Group groupId="12">
<Emp tasEmpID="00456" lName="Smith" fName="Jane" empStatus="A" city="HDQ" />
<Group groupId="1">
</Updates>
</Directives>
</CXIXML>
答案 0 :(得分:1)
看起来与你已经拥有的相似。然后在foreach中你可以为你的过程添加句子。
var document = XDocument.Load(xmlFile);
var employees = document.Descendants("Emp");
foreach (var employee in employees)
{
var employeeId = employee.Attribute("tasEmpID").Value;
Console.WriteLine(employeeId);
}
我将文档放在一个单独的变量中,这样您就可以使用此对象保存更改。
答案 1 :(得分:1)
我猜你的xml结构不正确,你描述的每个Emp内部的组都是如此,所以我会假设它。
要通过属性获取员工,您可以执行以下操作:
XElement xelement = XElement.Load(xmlFile);
var emp=xelement.Descendants("Emp")
.FirstOrDefault(e=>(string)e.Attribute("tasEmpID")=="00456");
现在要将组添加到当前员工,只需使用Add
方法:
emp.Add(groups.Select(g=>new XElement("Group",new XAttribute("groupId",g.Id))));
这假设groups
变量是IEnumerable<Group>