C# C读取Xml-LinQ
我试图阅读这个特定的xml,得到了一个System.xml.Linq.XContainer.Element。。。返回null。错误 XML 我想得到F和G的值 我试过这个: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")
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
};