C# Linq到XML-多级
我对Linq到xml查询有点问题。请看下面的数据C# Linq到XML-多级,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我对Linq到xml查询有点问题。请看下面的数据 <area id="16"> <standard value="1"> <temp value="M" /> </standard> <standard value="2"> <temp value="M" /> </standard> <standard value="3">
<area id="16">
<standard value="1">
<temp value="M" />
</standard>
<standard value="2">
<temp value="M" />
</standard>
<standard value="3">
<temp value="M" />
</standard>
</area>
<area id="17">
<standard value="1">
<temp value="M" />
</standard>
<standard value="2">
<temp value="M" />
</standard>
<standard value="3">
<temp value="M" />
</standard>
</area>
基本上,当我将区域id和标准值作为变量时,我想从xml中提取临时值
我可以通过以下查询得到面积
IEnumerable<XElement> area =
from c in areaRisk.Elements("area")
where (string)c.Attribute("id") == ddlArea.SelectedValue.ToString()
select c;
IEnumerable区域=
来自区域风险要素(“区域”)中的c
其中(string)c.Attribute(“id”)==ddlArea.SelectedValue.ToString()
选择c;
但是我不确定如何使用对区域XElement enumerable的类似查询获取临时值,或者是否可以修改上述查询以提取值
任何帮助都将不胜感激
谢谢
Steve您可以在一个查询中完成所有操作:
// change the assignment with whatever you want
int areaId = 17;
int standardValue = 3;
基于语法的查询解决方案:
string tempValue =
(from c in areaRisk.Elements("area")
where (int)c.Attribute("id") == areaId
from s in c.Elements("standard")
where (int)s.Attribute("value") == standardValue
select (string)c.Element("temp").Attribute("value")).FirstOrDefault();
或基于方法的查询:
string tempValue = areaRist.Elements("area")
.FirstOrDefault(a => (int)a.Attribute("id") == areaId)
.Elements("standard")
.FirstOrDefault(s => (int)s.Attribute("value") == standardValue)
.Element("temp")
.Attribute("value")
.Value;
假设您的区域ID是唯一的,请将查询更改为仅返回匹配的区域,如下所示:
XElement area =
(from c in areaRisk.Elements("area")
where (string)c.Attribute("id") == ddlArea.SelectedValue.ToString()
select c).FirstOrDefault();
然后,您可以对其调用另一个Elements()
:
var result = area.Elements("standard").Select(s => new {
ID = s.Attribute("id").Value,
Temp = s.Element("temp").Attribute("value")
});
这将为您提供所有的临时ID和值。谢谢,基于语法的解决方案带来了一个空引用错误,但更改了c.Element(“temp”).Attribute(“value”).FirstOrDefault();到s.Element(“temp”)修复了它。