【问题标题】:How to get values of XML node filtering by attribute name in C#?如何在 C# 中按属性名称获取 XML 节点过滤的值?
【发布时间】:2017-01-16 06:52:15
【问题描述】:

这是我的 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>

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

作为示例,我需要获取属性 = 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);
}

但上面的代码给出了以下错误信息。

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

感谢任何建议。

谢谢。

【问题讨论】:

    标签: c# xml xmldocument xmlnode xml-attribute


    【解决方案1】:

    这可能会帮助您解决问题

    XmlDocument doc = new XmlDocument();
    doc.Load(_xmlFilePath);
    XmlNodeList nodelist = doc.SelectNodes("//result[@value=45]");
    for (int i = 0; i < nodelist.Count; i++)
    {
        double value = double.Parse(nodelist[i].InnerText);
        Console.WriteLine("value : " + value);
    }
    

    【讨论】:

      【解决方案2】:

      这可能对你有用

      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);
      

      【讨论】:

        猜你喜欢
        • 2012-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-22
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多