如何在c#中查询和过滤XML文件
本文关键字:过滤 XML 文件 查询 | 更新日期: 2023-09-27 17:50:20
我一直在使用Visual Studio一段时间,并尝试学习c#编程。
目前,我的重点是xml结构。
具体来说,我正在尝试开发一个简单的控制台应用程序,基本上:
- 加载一个xml文件——它是另一个具有相当复杂结构的程序的输出;
- 通过某些类似sql的过滤语句过滤xml文件中的信息;
- 保存结果为另一个xml文件。
我正在处理的xml文件是一个具有数千个重复行(其中包含有关某个过程结果的信息)的大文件。为了给出一个概念,这个xml文件的简化版本如下:
<?xml version="1.0"?>
<OptimizationResultList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Results>
<OptimizationResult>
<Symbol>GARAN60</Symbol>
<ParameterValues>
<double>120</double>
<double>1</double>
<double>120</double>
<double>1</double>
<double>1</double>
</ParameterValues>
<Results>
<double>-94926.02</double>
<double>-3.59</double>
<double>236</double>
<double>32.2</double>
<double>-0.04</double>
</Results>
<AverageProfitAcrossTotalTimeSpan>0</AverageProfitAcrossTotalTimeSpan>
</OptimizationResult>
<OptimizationResult>
<Symbol>GARAN60</Symbol>
<ParameterValues>
<double>120</double>
<double>1</double>
<double>120</double>
<double>2</double>
<double>1</double>
</ParameterValues>
<Results>
<double>-149389.21</double>
<double>-5.76</double>
<double>282</double>
<double>33.69</double>
<double>-0.05</double>
</Results>
<AverageProfitAcrossTotalTimeSpan>0</AverageProfitAcrossTotalTimeSpan>
</OptimizationResult>
<OptimizationResult>
<Symbol>GARAN60</Symbol>
<ParameterValues>
<double>120</double>
<double>1</double>
<double>120</double>
<double>3</double>
<double>1</double>
</ParameterValues>
<Results>
<double>-64926.02</double>
<double>-5.59</double>
<double>636</double>
<double>42.2</double>
<double>0.04</double>
</Results>
<AverageProfitAcrossTotalTimeSpan>0</AverageProfitAcrossTotalTimeSpan>
</OptimizationResult>
</Results>
<Names>
<string>Net Profit</string>
<string>APR %</string>
<string>Trades</string>
<string>Winning %</string>
<string>Avg Profit %</string>
</Names>
<Symbols>
<string>GARAN60</string>
</Symbols>
<StrategyID>8fbc3832-7a0d-497c-bfab-a2c52dd15761</StrategyID>
<Scorecard>MS123 Scorecard</Scorecard>
<OptimizationMethod>Exhaustive</OptimizationMethod>
</OptimizationResultList>
(正如您所注意到的,Results,即这个输出xml的主干,在这里重复了3次。在大多数情况下,原始文件包含50K+条目。
我的问题基本上是这样的:
如何在c#中过滤XML并只返回结果:
1) Results>OptimizationResult>ParameterValues> ParameterValues的第二个双精度值在1到3之间;
2) AND, Results>OptimizationResult>Results>第三个双精度值大于500;
我访问了stackoverflow.com中的许多条目,检查了MSDN页面,但是,坦率地说,我无法最终确定执行此过滤的代码。
提前感谢你的帮助,
Aykut Saribiyik
基本上,我没有改进我的XML编辑功能,而是简单地依靠我以前的好习惯来解决这个问题。简单地说,我现在将相关元素的所有相关值加载到一个DataTable中。完成这些之后,查询就变得容易多了。另一方面,它不是经济高效的,因为我必须加载大量的数据集到DataTable只是为了运行一些简单的查询。不过,这次我选择的是有效性而不是效率。谢谢大家的关注。Aykut - Aykut Saribiyik刚刚编辑