【问题标题】:LINQ - Select * from XML elements with a certain tagLINQ - 从具有特定标签的 XML 元素中选择 *
【发布时间】:2012-04-18 19:34:10
【问题描述】:

我一直在查看以下链接中的 LINQ 示例;我已经在链接下面发布了代码。

是否可以修改此示例以使var 中返回的项目包含在与 doc.Descendants("person") 过滤器匹配的项目中找到的所有子元素?我基本上希望这个 XML 查询能够像 SQL 选择 * 这样我就不必像他们对饮料、moneySpent 和 zipCode 所做的那样明确指定字段名称。

http://broadcast.oreilly.com/2010/10/understanding-c-simple-linq-to.html#example_1

static void QueryTheData(XDocument doc)
{
     // Do a simple query and print the results to the console
     var data = from item in doc.Descendants("person")
                 select new
                 {
                      drink = item.Element("favoriteDrink").Value,
                      moneySpent = item.Element("moneySpent").Value,
                      zipCode = item.Element("personalInfo").Element("zip").Value
                  };
     foreach (var p in data)
         Console.WriteLine(p.ToString());
}

【问题讨论】:

  • 您是否有一个容器类来实际定义这些属性名称?如果不是,请考虑您不能按名称使用您的代码无法直接看到的字段(没有反射)。您可能可以制作一个工具,根据您的元素名称反射性地模拟容器,但您不能直接使用这些字段。
  • 这不是我想要的 100%,但它让我足够接近以获得解决方案,我认为这很好,因为我一开始并不知道我在寻找什么.

标签: c# .net xml linq


【解决方案1】:

OP 说他喜欢发布的答案,所以我将重新提交它以供科学使用 :)

var data = from item in doc.Descendants("person")
           select item;

唯一的问题是数据是IEnumerable<XElement>,您必须按字符串名称查询字段。

【讨论】:

  • 是的,没关系,因为无论如何这都是一个低分问题:p
  • 我发现这很有用,因为我可以将 .Descendants 切换到 .Elements() 在这种情况下,我只获得了直接子节点。使用 for-each 循环遍历该结果基本上可以让我获得子标签和值的名称-值列表,这样我就可以用它们形成一个 sql 查询。
【解决方案2】:
// Do a simple query and print the results to the console 
var data = from item in doc.Descendants("person") 
             select item;   

【讨论】:

  • 如果他想要 XElements,当然,我觉得他想要命名字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多