我对.Net LINQ很新。任何人都可以建议一种最好的智能方法将这个xml过滤成.Net对象,所以在代码中我可以轻松地为测试套件执行所需的测试用程序
<?xml version="1.0" encoding="utf-8" ?>
<TestSuites>
<TestSuite name="TS1" canexecute ="true">
<TestCase name="TC1" canexecute ="true"/>
<TestCase name="TC2" canexecute ="false"/>
<TestCase name="TC3" canexecute ="true"/>
</TestSuite>
<TestSuite name="TS2" canexecute ="false">
<TestCase name="TC4" canexecute ="true"/>
<TestCase name="TC5" canexecute ="false"/>
<TestCase name="TC6" canexecute ="true"/>
</TestSuite>
<TestSuite name="TS3" canexecute ="false">
<TestCase name="TC7" canexecute ="true"/>
<TestCase name="TC8" canexecute ="false"/>
<TestCase name="TC9" canexecute ="true"/>
</TestSuite>
</TestSuites>
Expected output
Key Value
TS1 TC1
TC3
TS3 TC7
TC9
答案 0 :(得分:2)
在我看来,你想要像:
var query = doc.Descendants("TestSuite")
.Where(x => (bool) x.Attribute("canexecute"))
.Elements("TestCase")
.Where(x => (bool) x.Attribute("canexecute"))
.ToLookup(x => (string) x.Parent.Attribute("name"),
x => (string) x.Attribute("name"));
所以说:
请注意,如果您有多个具有相同名称的测试套件,则使用上述查询,它们将被展平为单个组。