C# 如何通过LINQ遍历xml中的属性
请帮助我完成下面提到的场景,该场景包含xml,我希望代码使用C LINQC# 如何通过LINQ遍历xml中的属性,c#,xml,linq,C#,Xml,Linq,请帮助我完成下面提到的场景,该场景包含xml,我希望代码使用C LINQ <?xml version="1.0" encoding="utf-8" ?> <root> <Countries> <Country name="India"> <state id="1"> Tamilnadu</state> <state> Karnataka</state> &l
<?xml version="1.0" encoding="utf-8" ?>
<root>
<Countries>
<Country name="India">
<state id="1"> Tamilnadu</state>
<state> Karnataka</state>
</Country>
<Country name="America">
<state id="1"> WI</state>
<state> AW </state>
</Country>
<Country name="Africa">
<state id="1"> Melbourne</state>
<state> sydney </state>
</Country>
</Countries>
</root>
如何通过LINQ获取属性id=1的状态,因为我能够获取属性名=India?如何给出id=1,我是指没有1的数值,如果你使用C,你可以这样做:
XDocument document = XDocument.Load("filePath");
var states = (from state in document.Root.Descendants("state")
where state.Attribute("id") != null && state.Attribute("id").Value == "1"
select state).ToList();
您可以执行以下操作: 空检查很重要,因为根据没有空检查的结构判断,您将得到一个NullReferenceException 尝试以下方法
XDocument xml = XDocument.Load(file);
XElement state = xml.Root.Descendants("Country")
.First(c => c.Attribute("name").Value == "India")
.Descendants("state")
.First(s => (int)s.Attribute("id") == 1);
下一次,请先发布您尝试过的内容,以便我们可以帮助您编写代码
我也没有做空检查。如果找不到这些值,它将首先停止。由您自己做安全检查。我发现现有的答案过于冗长冗长。想象一下,如果要基于多个属性进行选择,会发生什么 同时最紧凑和最具表现力的解决方案是使用System.Xml.XPath命名空间中的XPath扩展 例如,要获取印度id为1的州:
var xdoc = XDocument.Load(file);
foreach (var element in xdoc.XPathSelectElements("//Country[@name='India']/state[@id=1]"))
{
Console.WriteLine("State " + element.Value + ", id " + (int)element.Attribute("id"));
}
要获取已分配任何id的所有国家/地区的所有州,请执行以下操作:
foreach (var element in xdoc.XPathSelectElements("//state[@id]"))
{
Console.WriteLine("State " + element.Value + ", id " + (int)element.Attribute("id"));
}
等等
您可以找到XPath规范。var query=来自element.Root.genderantsState中的s,其中s.Attributeid.Value==1选择s;-面向对象引用未设置为id为的第二个状态的实例=1@rajalakshmi-您需要添加空签入。请参阅我的编辑。
foreach (var element in xdoc.XPathSelectElements("//state[@id]"))
{
Console.WriteLine("State " + element.Value + ", id " + (int)element.Attribute("id"));
}