gpt4 book ai didi

c# - 如何使用 LINQ to XML 获取属性值?

转载 作者:可可西里 更新时间:2023-11-01 09:02:10 25 4
gpt4 key购买 nike

<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>
</Employee>
</Employees>

private void Window_Loaded(object sender, RoutedEventArgs e)
{
emplyeeDetails = XDocument.Load(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\LinqToXml\\Xmls\\" + "Employees.xml");
var emplyees = from emp in emplyeeDetails.Descendants("Employee").Take(10)
orderby emp.Element("EmpId").Value ascending
select new
{
Id = emp.Element("EmpId").Value,
Name = emp.Element("Name").Value,
Sex = emp.Element("Sex").Value,
WorkPhone=emp.Element("Phone").Attribute("Type").Value,
HomePhone = emp.Element("Phone").Attribute("Type").Value,
};
DgrdEmployeeDetails.ItemsSource = emplyees.ToList();
}

使用上面的代码,我可以得到下面的结果: enter image description here

但我需要列 WorkPhone的值(value) 424-555-0545而不是 Home和列 HomePhone的值(value) 423-555-0124而不是 Home .

我该怎么做?

最佳答案

使用Where方法:

对于家庭电话号码:

emp.Elements("Phone").Single(phoneElement => phoneElement.Attribute("Type").Value == "Home").Value

对于工作电话号码:

emp.Elements("Phone").Single(phoneElement => phoneElement.Attribute("Type").Value == "Work").Value
  • emp.Elements("Phone")emp 的所有“Phone”元素的可枚举。
  • Single 将获取满足指定属性的元素(如果有 0 个或超过 1 个元素满足该属性,则会引发错误)。
  • phoneElement.Attribute("Type").Value 是属性“Type”(即“Home”或“Work”)的值

那么,你的代码应该是:

var emplyees = from emp in emplyeeDetails.Descendants("Employee").Take(10)
orderby emp.Element("EmpId").Value ascending
select new
{
Id = emp.Element("EmpId").Value,
Name = emp.Element("Name").Value,
Sex = emp.Element("Sex").Value,
WorkPhone = emp.Elements("Phone").Single(phoneElement => phoneElement.Attribute("Type").Value == "Home").Value,
HomePhone = emp.Elements("Phone").Single(phoneElement => phoneElement.Attribute("Type").Value == "Work").Value,
};

如果 emp 元素可能没有工作电话号码或家庭电话号码,上述代码将在 中引发异常单例。要处理这种情况,您必须将代码更改为:

(string)emp.Elements("Phone").SingleOrDefault(phoneElement => phoneElement.Attribute("Type").Value == "Home")

SingleOrDefault 将等于 null 如果没有“Phone”元素满足条件并且 string 转换到 XElement 等同于 XElement.Value

关于c# - 如何使用 LINQ to XML 获取属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com