当前位置:  开发笔记 > 编程语言 > 正文

返回linq中具有相同名称的所有xml项

如何解决《返回linq中具有相同名称的所有xml项》经验,为你挑选了1个好方法。

如何查询xml文件,其中我有多个具有相同名称的项目,以便我可以返回所有项目.目前我只收到第一个结果.我设法让它使用以下代码,但这将返回满足特定搜索条件的所有项目.我想要的输出是获取两个结果,例如位置是都柏林.问题是如何使用linq to xml实现这一目标

干杯克里斯,

这是代码

string location = "Oslo";    
var training = (from item in doc.Descendants("item")
                         where item.Value.Contains(location)

                      select  new
                         {
                             event = item.Element("event").Value,
                             event_location = item.Element("location").Value
                         }).ToList();

xml文件如下所示


   
      C# Training
        Prague
        Oslo
        Amsterdam
        Athens
        Dublin
        Helsinki
          
   
        LINQ Training
        Bucharest
        Oslo
        Amsterdam
        Helsinki
        Brussels
        Dublin
               
 

Jon Skeet.. 5

您正在使用item.Element("location")它返回项目下的第一个位置元素.那不一定是你要找的地方!

我怀疑你真的想要更像的东西:

string location = "Oslo";
var training = from loc in doc.Descendants("location")
               where loc.Value == location
               select new
               {
                   event = loc.Parent.Element("event").Value,
                   event_location = loc.Value
               };

但话又说回来,它event_location会提供什么价值,因为它总是会成为你传递给查询的位置?

如果这不是您想要的,请提供更多详细信息 - 目前您的问题有点难以理解.您当前代码的详细信息以及您希望它给出的内容将有所帮助 - 以及您对"名称"的含义(因为它看起来您实际上意味着"价值").

编辑:好的,所以听起来你想要:

string location = "Oslo";
var training = from loc in doc.Descendants("location")
               where loc.Value == location
               select new
               {
                   event = loc.Parent.Element("event").Value,
                   event_locations = loc.Parent.Elements("location")
                                               .Select(e => e.Value)
               };

event_locations现在将是一系列字符串.您可以获得所需的输出:

for (var entry in training)
{
     Console.WriteLine("Event: {0}; Locations: {1}",
                       entry.event,
                       string.Join(", ", entry.event_locations.ToArray());
}

尝试一下,看看它是不是你想要的......



1> Jon Skeet..:

您正在使用item.Element("location")它返回项目下的第一个位置元素.那不一定是你要找的地方!

我怀疑你真的想要更像的东西:

string location = "Oslo";
var training = from loc in doc.Descendants("location")
               where loc.Value == location
               select new
               {
                   event = loc.Parent.Element("event").Value,
                   event_location = loc.Value
               };

但话又说回来,它event_location会提供什么价值,因为它总是会成为你传递给查询的位置?

如果这不是您想要的,请提供更多详细信息 - 目前您的问题有点难以理解.您当前代码的详细信息以及您希望它给出的内容将有所帮助 - 以及您对"名称"的含义(因为它看起来您实际上意味着"价值").

编辑:好的,所以听起来你想要:

string location = "Oslo";
var training = from loc in doc.Descendants("location")
               where loc.Value == location
               select new
               {
                   event = loc.Parent.Element("event").Value,
                   event_locations = loc.Parent.Elements("location")
                                               .Select(e => e.Value)
               };

event_locations现在将是一系列字符串.您可以获得所需的输出:

for (var entry in training)
{
     Console.WriteLine("Event: {0}; Locations: {1}",
                       entry.event,
                       string.Join(", ", entry.event_locations.ToArray());
}

尝试一下,看看它是不是你想要的......

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有