C# 如何使用XPathNavigator并返回不同的节点?

C# 如何使用XPathNavigator并返回不同的节点?,c#,.net,xml,xslt,xpath,C#,.net,Xml,Xslt,Xpath,我有这样一个XML文件: <Document> <Tests> <Test> <Name>A</Name> <Value>0.01</Value> <Result>Pass</Result> </Test> <Test> <Name>A<

我有这样一个XML文件:

<Document>
   <Tests>
      <Test>
         <Name>A</Name>
         <Value>0.01</Value>
         <Result>Pass</Result>
      </Test>
      <Test>
         <Name>A</Name>
         <Value>0.02</Value>
         <Result>Pass</Result>
      </Test>
      <Test>
         <Name>B</Name>
         <Value>1.01</Value>
         <Result>Fail</Result>
      </Test>
      <Test>
         <Name>B</Name>
         <Value>0.01</Value>
         <Result>Pass</Result>
      </Test>
   </Tests>
</Document>
现在,我使用此代码将所有测试放入
列表中

谢谢

使用XPath

/Document/Tests/Test
它选择测试节点。然后在
foreach
中使用:

或者使用以下XPath:

/Document/Tests/Test/*
它选择所有节点

 XPathNodeIterator it = nav.Select("/Document[Tests/Test/Name]");
这将返回所有包含Tests/Test/Name的文档元素


现在您可以确定,如果您扫描文档,您将获得3个页面。

对不起,我的问题不清楚。我之所以不使用navigator,是因为我还需要XML文件中节点的位置。使用您的代码是否也会考虑位置?请检查我更新的问题。你能告诉我如何用XPATH定义
/Document/Tests/Test
?@Sean87,在你的代码中用
/Document/Tests/Test/Name
替换我刚才想问的
/Document/Tests/Test
,如果Navigator中有一个内部vay可以返回节点的位置,这样我就不必手动执行了?@Sean87,您可以尝试
position()
XPath函数。但我认为你的方式更好。
/Document/Tests/Test
foreach (XPathNavigator val in it)
{
    testData = new TestData();
    testData.TestPosition = pos;
    testData.TestName = val.SelectSingleNode(nav.Compile("Name")).Value;
    testData.TestValue = val.SelectSingleNode(nav.Compile("Value")).Value;
    Datas.Add(testData);
    pos++;
}
/Document/Tests/Test/*
 XPathNodeIterator it = nav.Select("/Document[Tests/Test/Name]");