[英]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
方法只需要一个匹配项。还有First
和Last
以及FirstOrDefault
或LastOrDefault
,如果没有匹配项,则将返回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.