如何从C#中的XmlNodeList获取XmlElement?

时间:2017-01-23 10:32:07

标签: c# xml xmldocument

以下是我的XML文件示例

<?xml version="1.0" encoding="UTF-8"?>
<summary>  
  <testresult>    
    <result value="10" name="long">100</result>
    <result value="12" name="short">200</result>
    <result value="14" name="long">300</result>
  </testresult>
  <testresult>   
    <result value="10" name="short">50</result>
    <result value="12" name="short">60</result>
    <result value="14" name="long">70</result>
  </testresult>
</summary>

我需要获取结果元素的属性值。

我是使用foreach循环完成的,如下所示。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(item.Value);
XmlNodeList nodelist = xmlDoc.SelectNodes("//testresult");

for (int i = 0; i < nodelist.Count; i++)
{
    foreach (XmlElement child in nodelist[i])
    {
        if (child.HasAttributes)
        {
            result.Add(child.Attributes["value"].Value); //This is working fine.
        }       
    }
}

我的最终目标是识别名称并获取值,如果name =“long”。

为此我需要获取名称属性的值。 我需要这样做而不使用foreach循环。任何建议在for循环中实现我的任务

感谢。

3 个答案:

答案 0 :(得分:0)

您可以使用XDocument轻松解析xml:

var xDoc  = XDocument.Load(@"YourXmlFile");
var result = xDoc.Descendants("result")
              .Where(x=>x.Attribute("name").Value=="long")    
              .Select(x=>x.Value);

答案 1 :(得分:0)

如果您可以使用LINQ to XML,那么您甚至可以将结果作为整数

var xdoc = XDocument.Load(item.Value);

var results = from r in xdoc.Descendants("result")
              where (string)r.Attribute("name") == "long"
              select (int)r.Attribute("value");

输出:

[10, 14, 14]

如果必须使用XmlDocument

var result = from XmlElement tr in xmlDoc.SelectNodes("//testresult")
             from XmlElement r in tr
             where r.Attributes["name"].Value == "long"
             select r.Attributes["value"].Value;

您还可以提供更多精确的XPath

var result = from XmlElement r in xmlDoc.SelectNodes("//testresult/result[@name='long']")
             select r.Attributes["value"].Value;    

答案 2 :(得分:0)

使用xml linq获取所有值

J = Base.ReshapedArray(Jvec,(3,3), ())