我很难弄清楚如何正确搜索 xml 文档。我今天疯狂地阅读其他表格,但似乎无法理解。希望有人能给我一些更详细的信息,告诉我如何正确执行此操作以及为什么使用 LINQ。这是 XML 文件。
<?xml version="1.0" encoding="utf-8"?>
<body>
<Customers>
<Client>
<Firstname Value="someguy" />
<LastName Value="test" />
<PhoneNumber Value="541555555" />
<Address Value="55 nowhere" />
<City Value="sometown" />
<State Value="somestate" />
</Client>
</Customers>
</body>
我想要完成的是返回与客户名称匹配的每个元素的所有值。这是我的代码。
IEnumerable<XElement> test = doc.Root.Descendants()
.Where(nodeName => nodeName.Name == "Client"
&& nodeName.Descendants().Any(x => x.Name == "Firstname"
&& x.Value == "someguy"));
foreach (XElement m in test)
{
MessageBox.Show(m.ToString());
}
非常感谢您的帮助。如果可能的话,请解释一下使用 LINQ 的想法就像格式一样。不太确定如何解释我的要求,但在大多数情况下,只是更多地了解它的工作方式或格式等......
EDIT
我已经尝试了给出的解决方案,但似乎仍然没有任何效果。请告诉我我在这里做错了什么。
private void button2_Click(object sender, EventArgs e)
{
string seach = txtSearch.Text;
XDocument doc = XDocument.Load(@"C:\users\tim\desktop\test.xml");
var result = doc.Elements("Customers")
.Elements("Client")
.Where(x => x.Elements("Firstname")
.Where(c => c.Attribute("Value").Value == "someguy")
.Any())
.ToList();
foreach (var m in result)
{
MessageBox.Show(m.ToString());
}
}
EDIT:
好的,我现在已经开始工作并输出我正在寻找的数据。有人可以告诉我是否有更有效的方法来完成我在此编辑下发布的内容。
private void button2_Click(object sender, EventArgs e)
{
string seach = txtSearch.Text;
XDocument doc = XDocument.Load(@"C:\users\tim\desktop\test.xml");
var result = (from clientNode in doc.Root.Descendants("Client")
from name in clientNode.Descendants("Firstname")
where name.Attribute("Value").Value == "someguy"
select new
{
Fname = clientNode.Element("Firstname").Attribute("Value").Value,
Lname = clientNode.Element("LastName").Attribute("Value").Value,
Phone = clientNode.Element("PhoneNumber").Attribute("Value").Value,
Address = clientNode.Element("Address").Attribute("Value").Value,
City = clientNode.Element("City").Attribute("Value").Value,
State = clientNode.Element("State").Attribute("Value").Value
});
foreach (var m in result)
{
MessageBox.Show(m.Fname + "\n" +
m.Lname + "\n" +
m.Phone + "\n" +
m.Address + "\n" +
m.City + "\n" +
m.State);
}