如何使用Linq to XML获取XML属性值?

时间:2016-06-28 14:45:08

标签: c# xml linq

我正在尝试从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>

2 个答案:

答案 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>