如何查询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()); }
尝试一下,看看它是不是你想要的......
您正在使用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()); }
尝试一下,看看它是不是你想要的......