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

时间:2014-03-14 11:44:54

标签: c# xml

我已经使用Visual Studio一段时间了,并尝试用C#学习编程。

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

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

  1. 加载一个xml文件 - 这是另一个具有相当复杂结构的程序的输出;
  2. 通过某些类似sql的过滤语句过滤此xml文件的信息;
  3. 将结果保存为另一个xml文件。
  4. 我正在处理的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>
    

    (正如您所注意到的,结果,即此输出xml的主干,在此重复3次。原始文件在大多数情况下包含50K +条目。)

    我的问题基本上是这样的:

    C#中的代码如何过滤此XML并仅返回结果:

    1)结果&gt; OptimizationResult&gt; ParameterValues&gt; ParameterValues的第二个双精度值介于1和3之间;

    2)AND,结果&gt; OptimizationResult&gt;结果&gt;结果的第三个双精度值大于500;

    我访问了stackoverflow.com中的许多条目,在MSDN页面中检查过,但是,坦率地说,我无法完成执行此过滤的代码。

    先谢谢你的帮助,

    Aykut Saribiyik

1 个答案:

答案 0 :(得分:0)

基本上,我通过不改进我的xml编辑功能解决了这个问题,而是仅仅依靠我的旧习惯。简而言之,我现在将相关元素的所有相关值加载到一个DataTable中。完成此操作后,查询变得更加容易。另一方面,它不具成本效益,因为我必须将大量数据加载到DataTable中才能运行一些简单的查询。尽管如此,我这次选择的是效率而不是效率。感谢大家的关注。 Aykut - Aykut Saribiyik刚刚编辑