C# C读取Xml-LinQ

C# C读取Xml-LinQ,c#,xml,linq,C#,Xml,Linq,我试图阅读这个特定的xml,得到了一个System.xml.Linq.XContainer.Element。。。返回null。错误 XML 我想得到F和G的值 我试过这个: var modules2 = disXelement.Element("Modules").Elements("Module") .Where((module) => module.Attribute("Attr").Value == "XXXX")

我试图阅读这个特定的xml,得到了一个System.xml.Linq.XContainer.Element。。。返回null。错误

XML

我想得到F和G的值

我试过这个:

            var modules2 = disXelement.Element("Modules").Elements("Module")
                      .Where((module) => module.Attribute("Attr").Value == "XXXX")
                      .Select((module) => new
                      {
                          v= module.Descendants().Select((v) => new
                          {
                              Ip = (string)v.Elements().Where(e => e.Name.LocalName == "F").First(),
                              Port = (string)v.Elements().Where(e => e.Name.LocalName == "G").First()
                          })
                      });
哪项工作得到了两个messageBox值,但我收到了一个错误:System.InvalidOperationException:“Sequence contains no elements”(序列不包含元素)在v=module.Subderstands…

,对我有效:

var doc = XDocument.Parse(xml);

foreach (XElement module in doc.Root.Elements())
{
    foreach (XElement letterGroup in module.Elements())
    {
        foreach (XElement letter in letterGroup.Elements())
        {
            switch(letter.Name.LocalName)
            {
                case "F":
                    MessageBox.Show("IP: " + letter.Value);
                    break;
                case "G":
                    MessageBox.Show("Port: " + letter.Value);
                    break;
                }
            }
        }
    }
}
      var modules = from module in disXelement.Element("Modules").Elements("Module")
                      where module.Attribute("Attr").Value == "XXXX"
                      select new
                      {
                          Ip = module.Descendants().Where(e => e.Name.LocalName == "F").First()?.Value,
                          Port = module.Descendants().Where(e => e.Name.LocalName == "G").First()?.Value                              
                      };

你不是在找F或G。。。撕下整个“选择新”,模块是否包含任何内容?Ip=v.ElementF.Value,Port=v.ElementG.Value您是否删除了新模块,是否取回了任何内容?你可能有一个属性A,你需要深入到A的另一个层次才能得到B,C,D等等…如果我删除了新的变量,那么上下文中就不再存在了…请重新阅读我上面的评论。基本上从disXelement.ElementModules.ElementsModule中的模块运行var modules=from,其中module.AttributeAttr.Value==XXXX;那个模块现在包含什么?
var doc = XDocument.Parse(xml);

foreach (XElement module in doc.Root.Elements())
{
    foreach (XElement letterGroup in module.Elements())
    {
        foreach (XElement letter in letterGroup.Elements())
        {
            switch(letter.Name.LocalName)
            {
                case "F":
                    MessageBox.Show("IP: " + letter.Value);
                    break;
                case "G":
                    MessageBox.Show("Port: " + letter.Value);
                    break;
                }
            }
        }
    }
}
      var modules = from module in disXelement.Element("Modules").Elements("Module")
                      where module.Attribute("Attr").Value == "XXXX"
                      select new
                      {
                          Ip = module.Descendants().Where(e => e.Name.LocalName == "F").First()?.Value,
                          Port = module.Descendants().Where(e => e.Name.LocalName == "G").First()?.Value                              
                      };