2011-11-21 69 views
0

在之前关于如何使用Linq到XML的问题上,我提供了一些帮助,而且我几乎可以使用它,但是我一直在使嵌套工作正常工作。请记住,这是我第一次使用LINQ,所以我是一个完整的新手。我有一个xml文件,它以流的形式进入Web应用程序。 XML是非常简单的,基本上遵循以下格式:修改LINQ to XML语句以从嵌套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”标签中的内容。抱歉混淆。

+0

我不知道我是否正确理解你。在Brand属性中,您希望分配一些对象集合,这些对象集合将从StuffToGetChild1,StuffToGetChild2标签创建 – Michal

+0

正确。大多数的XML是非常自上而下的东西,一个层次。在StuffToGetPARENT标签中,有一堆无用的子标签,我不需要。然后你会得到一些“品牌”子标签,其中包含我需要的信息。我不知道返回它的最佳方式,列表或集合,我不确定我是否与LINQ一起工作 – optionsix

回答

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 
         { 
          ... 
         }) 
         };