Linq to XML嵌套标签加入问题

时间:2011-03-11 12:20:41

标签: c# silverlight linq silverlight-3.0 linq-to-xml

我有一个看起来像这样的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

2 个答案:

答案 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
                                };