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

使用ASP.NET(C#)解析多个XML文件并返回具有特定元素的XML文件

如何解决《使用ASP.NET(C#)解析多个XML文件并返回具有特定元素的XML文件》经验,为你挑选了1个好方法。

问候.

我正在寻找一种方法,用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的功能.

谢谢!

〜詹姆斯



1> naspinski..:

如果您使用的是.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规则!

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