我有一个看起来像这样的XML
<Labs>
<Lab id="a" name="a">
<Test name="aa"></Test>
<Test name="ab"></Test>
<Test name="ac"></Test>
</Lab>
<Lab id="b" name="b">
<Test name="ba"></Test>
<Test name="bb"></Test>
</Lab>
</Labs>
我希望通过单个select语句使用LINQ to XML从单个表中获取此XML中的数据。如果您能为我提供如何进行查询的参考。
我将Linq与XML查询输出绑定到silverlight网格。在silverlight中输出应该是这样的......
LabName TestName
a aa
a ab
a ac
b ba
b bb
答案 0 :(得分:1)
好的,这是一个有效的例子:
string xml =@"<Labs>
<Lab id='a'>
<Test name='aa'></Test>
<Test name='ab'></Test>
<Test name='ac'></Test>
</Lab>
<Lab id='b'>
<Test name='ba'></Test>
<Test name='bb'></Test>
</Lab>
</Labs>";
XDocument document = XDocument.Parse(xml);
IEnumerable<XElement> xElements = document.Descendants().Where(e => e.Name == "Test");
var results = xElements.Select(m => new
{
Test = m.Attributes("name").FirstOrDefault().Value,
Lab =m.Parent.Attributes("id").FirstOrDefault().Value
});
foreach (var result in results)
{
Console.Write(result.Lab);
Console.Write('\t');
Console.WriteLine(result.Test);
}
答案 1 :(得分:0)
由Aliostad
发布的上述解决方案的lambda免费版本。你也可以使用它......
var Tests = from tests in doc.Descendants("Test")
where tests.Attributes().Count() > 0
select new LabTestModel
{
LabName = tests.Parent.Attribute("Name").Value,
TestName = tests.Attribute("Name").Value
};