使用LINQ从XML文件读取时遇到问题。
这是我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<Employees>
<Employee>
<Name Type="First">Jack</Name>
<Name Type="Last">Black</Name>
</Employee>
<Employee>
<Name Type="First">John</Name>
<Name Type="Last">Blue</Name>
</Employee>
<Employee>
<Name Type="First">Dan</Name>
<Name Type="Last">Red</Name>
</Employee>
<Employee>
<Name Type="First">Patrick</Name>
<Name Type="Last">Green</Name>
</Employee>
</Employees>
我正在使用的代码是
XElement doc = XElement.Load("xmldoc.xml");
var query = from x in doc.Elements("Employee") where x.Element("Name").Attribute("Type").Value == "First" select x;
foreach (XElement item in query)
{
Console.WriteLine(item.Element("Name").Value);
}
此代码返回所有名字,但是当我从头到尾更改属性值时,它变为空白。
当我切换名称节点时,它会返回姓氏。对我来说,看起来每个雇员查询都从名字节点返回值而忽略第二个名称节点。你能帮帮我解决这个问题吗?
答案 0 :(得分:5)
问题是x.Element("Name")
调用将返回第一个Name
元素。您实际上需要查询所有Name
元素并过滤具有Last
属性值的元素。
请改为尝试:
var query = from x in doc.Elements("Employee").Elements("Name")
where x.Attribute("Type").Value == "Last"
select x;
foreach (XElement item in query)
{
Console.WriteLine(item.Value);
}