获取节点属性的 xml C#

标签: Linq XML C#
发布时间: 2017/2/28 21:19:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要的所有节点从一个 xml 文件,但我无法拥有家庭和工作的属性节点。 好吧,我的情况我可以回家电话但不是电话工作。 谢谢。

这是 xml 文件结构︰

<Employees>
    <Employee>
      <EmpId>1</EmpId>
      <Name>Sam</Name>   
      <Sex>Male</Sex>
      <Phone Type="Home">423-555-0124</Phone>
      <Phone Type="Work">424-555-0545</Phone>
      <Address>
          <Street>7A Cox Street</Street>
          <City>Acampo</City>
          <State>CA</State>
          <Zip>95220</Zip>
          <Country>USA</Country>
      </Address>
    </Employee>
</Employee>  

这是我在 C# 中的代码︰

XElement xelement = XElement.Load("employees.xml");
IEnumerable<XElement> employees = xelement.Elements();
Console.WriteLine("List of all Employee Names along with their ID:");
foreach (var employee in employees)
{     
   employee.Element("EmpId").Value);
   Console.WriteLine("SEX: {0}", employee.Element("Sex").Value);
   Console.WriteLine("Home: {0}", employee.Element("Phone").Value);
   Console.WriteLine("Work: {0}\n", employee.Element("Phone").Value);
}

结果︰

enter image description here

希望︰

enter image description here

解决方法 1:

您需要使用 Attribute 方法来获取属性。您需要查询 Phone 元素的 Type 属性的 Home 。例如︰

Console.WriteLine("Home: {0}",
    employee.Elements("Phone")
            .Single(x => x.Attribute("Type").Value == "Home")
            .Value);

你应该考虑你想要做如果你想要有类型的电话号码,或者如果有多个。( Single 方法要求一个匹配。此外,还有 FirstLast ,以及 FirstOrDefaultLastOrDefault ,它将返回 null 如果没有匹配项。)

官方微信
官方QQ群
31647020