【问题标题】:Modifying LINQ to XML statement to grab specific data from nested xml修改 LINQ to XML 语句以从嵌套 xml 中获取特定数据
【发布时间】:2011-11-21 14:41:34
【问题描述】:

我在较早的一个关于如何使用 Linq to 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”标签中的内容。很抱歉造成混乱。

【问题讨论】:

  • 我不知道我是否理解正确。在 Brand 属性中,您要分配一些对象集合,这些对象将从 StuffToGetChild1、StuffToGetChild2 标签创建??
  • 正确。大多数 xml 都是自上而下的东西,只有一层。在 StuffToGetPARENT 标签内,有一堆没用的子标签,我不需要。然后你会得到一些“品牌”子标签,其中包含我需要的信息。我不知道返回它的最佳方式,列表或集合,我不确定我是使用 LINQ 的新手

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


【解决方案1】:

我认为您可以通过第一个中的另一个 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 
                        {
                            ...
                        })
                      };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多