问候.
我正在寻找一种方法,用ASP.NET(C#)解析特定目录中的大量XML文件.我希望能够从特定元素返回内容,但在此之前,需要找到元素之间具有特定值的内容.
示例XML文件1:
Title 1 Content filter
示例XML文件2:
Title 2 Content filter, different filter
示例案例1:
给我所有具有'过滤器'过滤器的XML.
案例2:
给我所有标题为"Title 1"的XML.
看起来,这似乎应该可以用LINQ,但我只看到有关如何在有一个XML文件时执行此操作的示例,而不是在存在多个时,例如在这种情况下.
我希望这可以在服务器端完成,这样我就可以在那一端缓存.
可以使用任何版本的.NET Framework的功能.
谢谢!
〜詹姆斯
如果您使用的是.Net 3.5,使用LINQ非常简单:
//get the files XElement xe1 = XElement.Load(string_file_path_1); XElement xe2 = XElement.Load(string_file_path_2); //Give me all XML that has a filter of 'filter'. var filter_elements1 = from p in xe1.Descendants("filter") select p; var filter_elements2 = from p in xe2.Descendants("filter") select p; var filter_elements = filter_elements1.Union(filter_elements2); //Give me all XML that has a title of 'Title 1'. var title1 = from p in xe1.Descendants("title") where p.Value.Equals("Title 1") select p; var title2 = from p in xe2.Descendants("title") where p.Value.Equals("Title 1") select p; var titles = title1.Union(title2);
这一切都可以写成速记,只需4行即可获得结果:
XElement xe1 = XElement.Load(string_file_path_1); XElement xe2 = XElement.Load(string_file_path_2); var _filter_elements = (from p1 in xe1.Descendants("filter") select p1).Union(from p2 in xe2.Descendants("filter") select p2); var _titles = (from p1 in xe1.Descendants("title") where p1.Value.Equals("Title 1") select p1).Union(from p2 in xe2.Descendants("title") where p2.Value.Equals("Title 1") select p2);
这些都是IEnumerable列表,因此它们非常容易使用:
foreach (var v in filter_elements) Response.Write("value of filter element" + v.Value + "
");
LINQ规则!