繁体   English   中英

获取节点属性xml C#

[英]Get node attribute xml C#

我正在尝试从xml文件获取所有节点,但是无法获取具有诸如Home and Work之类的属性的节点。 好吧,就我而言,我可以给家里打电话,但不能给公司打电话。 谢谢。

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

结果:

在此处输入图片说明

希望:

在此处输入图片说明

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

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

你应该想想你想要做什么,如果没有你想要的类型的电话号码,或如果有多个的。 Single方法只需要一个匹配项。还有FirstLast以及FirstOrDefaultLastOrDefault ,如果没有匹配项,则将返回null 。)

这应该使您获得第一个名为Phone的元素,其中属性名称为“ Home”

employee.Elements("Phone")
                  .First(x => x.Attribute("name").Value == "Home");

这是您的完整代码

static void Main(string[] args)
{
   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)
   {     
      Console.WriteLine("EmpId: {0}", employee.Element("EmpId").Value);
      Console.WriteLine("SEX: {0}", employee.Element("Sex").Value);
     //Console.WriteLine("Home: {0}", employee.Element("Phone").Value);
      Console.WriteLine("Home: {0}", employee.Elements("Phone")
               .Single(x => x.Attribute("Type").Value == "Home").Value);
      Console.WriteLine("Home: {0}", employee.Elements("Phone")
               .Single(x => x.Attribute("Type").Value == "Work").Value);
     //Console.WriteLine("Work: {0}\n", employee.Element("Phone").Value);
   }
   Console.Read();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM