如何以字符串值获取Elements,inner Element值。
我的XML格式是,
<Filters>
<filterValues>
<filter_id>BN</filter_id>
<value>100</value>
</filterValues>
<filterValues>
<filter_id>SRE</filter_id>
<value>355</value>
</filterValues>
</Filters>
在这个xml中,我想根据filter_id
属性获取Value字段。
所以,我写了一个查询。
var searchp =
from t1 in doc.Elements("filters")
where (string)(t1.Elements("filterValues").Elements().Select(elem=>elem.Element("filter_id").Value).ToString()) == "SRE"
select new
{
valuestr=t1.Element("filterValues").Element("value").Value
};
请帮助我。
答案 0 :(得分:2)
var sr = new StringReader(@"<Filters>
<filterValues>
<filter_id>BN</filter_id>
<value>100</value>
</filterValues>
<filterValues>
<filter_id>SRE</filter_id>
<value>355</value>
</filterValues>
</Filters>");
XElement filters = XElement.Load(sr);
string filterId = "SRE";
var values = filters.Elements().Where(f => f.Element("filter_id").Value == filterId).Select(element => element.Element("value").Value);
foreach (var value in values)
{
MessageBox.Show(value);
}
答案 1 :(得分:1)
使用xpath查找节点会更容易。您可以使用XPathSelectElements
entension方法:
var doc = XDocument.Parse(xml);
var nodes = doc.XPathSelectElements("/Filters/filterValues/filter_id[text()='SRE']/following-sibling::value");
foreach (var node in nodes)
{
// here you can use explicit conversion like
// var value = (int)node; if you want to cast the node value to int
// var node = (string)node; or to string
}