C# 解析复杂嵌套的XML

C# 解析复杂嵌套的XML,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我一直在阅读各种教程,但不知道如何有条件地解析以下XML结构,即用户输入一个州的名称,然后接收国会大厦的名称 当我用下面的代码测试它时,没有弹出MessageBox C代码 Foo.xml 这应该起作用: List<State> states = (from s in XDocument.Load(@"Foo.xml").Descendants("State") select new State { Name = s.Attribute("Name")

我一直在阅读各种教程,但不知道如何有条件地解析以下XML结构,即用户输入一个州的名称,然后接收国会大厦的名称

当我用下面的代码测试它时,没有弹出MessageBox

C代码

Foo.xml

这应该起作用:

List<State> states = (from s in XDocument.Load(@"Foo.xml").Descendants("State")
    select new State
    {
        Name = s.Attribute("Name").Value,
        Capital = s.Attribute("Capital").Value
    }).ToList();

foreach (State state in states)
{
    //do something...
}

//Or get a specific state
var alabama = states.FirstOrDefault(a => a.Name == "Alabama");
这应该起作用:

List<State> states = (from s in XDocument.Load(@"Foo.xml").Descendants("State")
    select new State
    {
        Name = s.Attribute("Name").Value,
        Capital = s.Attribute("Capital").Value
    }).ToList();

foreach (State state in states)
{
    //do something...
}

//Or get a specific state
var alabama = states.FirstOrDefault(a => a.Name == "Alabama");

我对你的代码做了一些修改。这会让你从州里回到国会大厦

var stateCapital = from states in XDocument.Load(@"foo.xml").Descendants("State")
                    where states.Attribute("Name").Value == "Alabama"
                    select states.Attribute("Capital").Value;

Messagebox.Show(stateCapital);
如果需要for循环中每个状态的所有大写字母的名称-

var statesCollection = from states in XDocument.Load(@"foo.xml").Descendants("State") select states;

foreach (var state in statesCollection)
{
    Messagebox.Show(state.Attribute("Capital").Value);
}

我对你的代码做了一些修改。这会让你从州里回到国会大厦

var stateCapital = from states in XDocument.Load(@"foo.xml").Descendants("State")
                    where states.Attribute("Name").Value == "Alabama"
                    select states.Attribute("Capital").Value;

Messagebox.Show(stateCapital);
如果需要for循环中每个状态的所有大写字母的名称-

var statesCollection = from states in XDocument.Load(@"foo.xml").Descendants("State") select states;

foreach (var state in statesCollection)
{
    Messagebox.Show(state.Attribute("Capital").Value);
}

您的linq中是否缺少where子句?您的XML中是否只有细分为状态的国家?我生活在一个没有州的小国,互联网上的许多地址输入表格要求提供我无法提供的州。当不同的国家有同名的州时,您希望返回什么?我不知道是否存在两个这样的国家,但在苏联分裂成独立国家之前,格鲁吉亚是苏联的一个国家,所以这是可能的。@Hybridzz:我将我的测试代码编辑为更简单的代码。你的linq中是否缺少where子句?你的XML中是否只包含细分成国家的国家?我生活在一个没有州的小国,互联网上的许多地址输入表格要求提供我无法提供的州。当不同的国家有同名的州时,您希望返回什么?我不知道是否存在两个这样的国家,但在苏联分裂成独立国家之前,格鲁吉亚是苏联的一个国家,所以这是可能的。@Hybridzz:我把我的测试代码编辑成了更简单的代码。