如何从xml linq中的Elements获取Inner Element值

时间:2012-03-03 11:36:49

标签: xml linq

如何以字符串值获取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                   
      };

请帮助我。

2 个答案:

答案 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 
}