如何在c#中查询和过滤XML文件

本文关键字:过滤 XML 文件 查询 | 更新日期: 2023-09-27 17:50:20

我一直在使用Visual Studio一段时间,并尝试学习c#编程。

目前,我的重点是xml结构。

具体来说,我正在尝试开发一个简单的控制台应用程序,基本上:

  1. 加载一个xml文件——它是另一个具有相当复杂结构的程序的输出;
  2. 通过某些类似sql的过滤语句过滤xml文件中的信息;
  3. 保存结果为另一个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

如何在c#中查询和过滤XML文件

基本上,我没有改进我的XML编辑功能,而是简单地依靠我以前的好习惯来解决这个问题。简单地说,我现在将相关元素的所有相关值加载到一个DataTable中。完成这些之后,查询就变得容易多了。另一方面,它不是经济高效的,因为我必须加载大量的数据集到DataTable只是为了运行一些简单的查询。不过,这次我选择的是有效性而不是效率。谢谢大家的关注。Aykut - Aykut Saribiyik刚刚编辑