C# 如何使用XPathNavigator并返回不同的节点?
我有这样一个XML文件: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<
<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]");