1

私は古いコードを更新していて、XMLに関連するすべてのものをXPathからLinqに変更することにしました(その間に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);
}
4

2 に答える 2

2

GroupLINQを介して名前を取得する大まかな例を次に示します。

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を提供し、代わりに特定の値を期待します。

于 2012-07-16T08:34:16.030 に答える
2
XPathNodeIterator it = nav.Select("/Document//Tests/Test[Type='Failure']/Groups/Group/Name");
var groups = (from XPathNavigator @group in it select @group.Value).ToList();
于 2012-07-16T08:17:59.193 に答える