如何在C#中通过属性名获取XML节点过滤的值?

时间:2017-01-16 06:52:15

标签: c# xml xmldocument xmlnode xml-attribute

这是我的XML文件的一部分

<summary>
  <testcase>  
    <result value="-45">100</result>
    <result value="0">200</result>
    <result value="45">300</result>
  </testcase>
  <testcase>    
    <result value="-45">1000</result>
    <result value="0">2000</result>
    <result value="45">3000</result>
  </testcase>  
 <testcase>    
    <result value="-45">0.1</result>
    <result value="0">0.2</result>
    <result value="45">0.3</result>
  </testcase>
</summary>

我需要通过按属性名称过滤来获取元素值。

  

作为一个例子,我需要得到所有值,其中attribute = 45然后   答案是300,3000,0.3

XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNodeList nodelist = doc.SelectNodes("//testcase");

for (int i = 0; i < nodelist.Count; i++)
{
    Double value;                        
    Double.TryParse(nodelist[i].SelectSingleNode("result").Attributes["45"].InnerText, out value);
    Console.WriteLine("value : " + value);
}

但上面的代码提供了以下错误消息。

  

对象引用未设置为对象的实例。

任何建议都表示赞赏。

感谢。

2 个答案:

答案 0 :(得分:3)

这可以帮助您解决问题

mapDispatchToProps

答案 1 :(得分:0)

这可能会为你做到这一点

XDocument xdc = XDocument.Load(YourXMLFile);
var rslt = xdc.Descendants("result").Where(x => x.Attribute("value").Value == "45");
string rsltstr = string.Empty;
foreach(XElement el in rslt)
{
    rsltstr = rsltstr + el.Value + ", ";
}

var rslt = xdc.Descendants("result")
              .Where(x => x.Attribute("value").Value == "45")
              .Select(q=>q.Value);