修改LINQ to XML语句以从嵌套xml中获取特定数据

时间:2011-11-21 14:41:34

标签: .net xml linq xml-serialization linq-to-xml

我之前在一个关于如何将Linq用于XML的问题中得到了帮助,我几乎让它工作了,但我仍然坚持让嵌套正常工作。请记住,这是我第一次使用LINQ,所以我是一个完整的新手。我有一个xml文件,它作为流进入Web应用程序。 xml非常简单,基本上遵循以下格式:

 <root>
    <people>
        <person>
            <StuffToGet1>
            <StuffToGet2>
            ...
            <StuffToGetPARENT>
                <useless1>
                <useless2>
                ...
                <StuffToGetChild1>
                <StuffToGetChild2>
            </StuffToGetPARENT>
         </person>
    </people>
    </root>

显然,我对获得顶级水平的东西没有任何问题。目前,我的Linq正在撤回一切。我想过滤子查询上的选择,忽略StuffToGetChild标签中的所有内容。标签都将被命名为相同的东西,(不是Brand1,Brand2等)。以下是我到目前为止...请帮助!!

XDocument xdoc = XDocument.Load(XmlReader.Create(responseStream));
var People = from Person in xdoc.Descendants("Person")
                  where Person.Element("Role").Value != "Admin"
                  orderby Specialist.Element("Role").Value
                  select new
                  {
                  StuffToGet1 = Person.Element("StuffToGet1").Value,
                  StuffToGet2 = Person.Element("StuffToGet2").Value,
                  Brand = Person.Element("StuffToGetPARENT").Value
                          };


        gvTest.DataSource = People;
        gvTest.DataBind();
编辑:我刚刚意识到我说的一些可能有点令人困惑的事情。 “品牌”实际上是“StuffToGetChild”标签中的内容。抱歉混淆。

1 个答案:

答案 0 :(得分:0)

我认为您可以通过第一个内部的另一个linq查询来解决此问题。

from Person in xdoc.Descendants("Person")
              where Person.Element("Role").Value != "Admin"
              orderby Specialist.Element("Role").Value
              select new
              {
              StuffToGet1 = Person.Element("StuffToGet1").Value,
              StuffToGet2 = Person.Element("StuffToGet2").Value,
              Brand = (from x in 
                       Person.Descendants("StuffToGetChild1") select new 
                        {
                            ...
                        })
                      };