从`XPathNodeIterator`转换为`linq`

时间:2012-07-16 08:10:42

标签: c# xml linq

我正在更新我的一些旧代码,并决定将从XPath到Linq的所有XML相关更改(同时学习linq)。我遇到了这段代码,有人可以告诉我如何将其翻译成linq语句吗?

var groups = new List<string>();
XPathNodeIterator it = nav.Select("/Document//Tests/Test[Type='Failure']/Groups/Group/Name");

foreach (XPathNavigator group in it)
{
    groups.Add(group.Value);
}

2 个答案:

答案 0 :(得分:2)

XPathNodeIterator it = nav.Select("/Document//Tests/Test[Type='Failure']/Groups/Group/Name");
var groups = (from XPathNavigator @group in it select @group.Value).ToList();

答案 1 :(得分:2)

以下是通过LINQ获取Group名称的粗略准备示例:

static void Main(string[] args)
        {
            var f = XElement.Parse("<root><Document><Tests><Test Type=\"Failure\"><Groups><Group><Name>Name 123</Name></Group></Groups></Test></Tests></Document></root>");

            var names =
                f.Descendants("Test").Where(t => t.Attribute("Type").Value == "Failure").Descendants("Group").Select(
                    g => g.Element("Name").Value);

            foreach (var name in names)
            {
                Console.WriteLine(name);    
            }
        }

就个人而言,这是我总是喜欢编写单元测试的代码,给出某些XML并期望返回某些值。