C# LinqToXML:访问子元素

C# LinqToXML:访问子元素,c#,xml,linq,C#,Xml,Linq,我试图找出一个解决我遇到的一个小问题的办法,但在过去的两天里,我并没有取得多大的成功。我在这里浏览了很多帖子,但是我没有为自己找到一个合适的解决方案。我知道这可能是你们的基本问题,但我似乎已经失去了注意力,可以清楚地思考这个问题 所以,这就是问题所在。下面是一个示例XML,具有我需要的结构。我想要的是读取这个XML,转到我想要的事件,然后读取/存储所有测试元素 <Config> <Events> <Event_1> <NameOfEven

我试图找出一个解决我遇到的一个小问题的办法,但在过去的两天里,我并没有取得多大的成功。我在这里浏览了很多帖子,但是我没有为自己找到一个合适的解决方案。我知道这可能是你们的基本问题,但我似乎已经失去了注意力,可以清楚地思考这个问题

所以,这就是问题所在。下面是一个示例XML,具有我需要的结构。我想要的是读取这个XML,转到我想要的事件,然后读取/存储所有测试元素

<Config>
<Events>
<Event_1>
        <NameOfEvent>SomeName:</NameOfEvent>
        <test id="test001">
                <xpath>"some xpath"</xpath>
                <value>someValue1</value>
                <tagName>none</tagName>
            </test>
            <test id="test002">
                <xpath>"some xpath"</xpath>
                <value>someValue2</value>
                <tagName>none1</tagName>
            </test>
            <test id="test003">
                <xpath>"some xpath"</xpath>
                <value>someValue3</value>
                <tagName>none2</tagName>
            </test>
        </Event_1>
        </Events>
        </Config>
然后,我想使用foreach循环来访问所有测试元素。但是,我只能访问第一个元素测试的chiled节点。
你能帮忙吗?提前谢谢大家

假设您的XML没有特定的名称空间

var evt = (from el in doc.Descendants("test")
           where el.Parent.Name == "Event_1"
           group el by el.Parent.Element("NameOfEvent").Value into g
           select new {
               Name = g.Key,
               Tests = g.Select(x => new {
                   XPath = x.Element("xpath").Value,
                   Value = x.Element("value").Value,
                   TagName = x.Element("tagName").Value
               })
           }).FirstOrDefault();

Console.WriteLine("Event name: " + evt.Name);
foreach (var test in evt.Tests)
{
    Console.WriteLine(test.XPath);
    Console.WriteLine(test.Value);
    Console.WriteLine(test.TagName);
}

非常感谢您!它工作得很好。所以我采取了完全错误的方法。
var evt = (from el in doc.Descendants("test")
           where el.Parent.Name == "Event_1"
           group el by el.Parent.Element("NameOfEvent").Value into g
           select new {
               Name = g.Key,
               Tests = g.Select(x => new {
                   XPath = x.Element("xpath").Value,
                   Value = x.Element("value").Value,
                   TagName = x.Element("tagName").Value
               })
           }).FirstOrDefault();

Console.WriteLine("Event name: " + evt.Name);
foreach (var test in evt.Tests)
{
    Console.WriteLine(test.XPath);
    Console.WriteLine(test.Value);
    Console.WriteLine(test.TagName);
}