[英]How to use XPathNavigator and return different nodes?
我有一个这样的 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>
还有一个类来保存每个测试的数据:
public class TestData
{
public string TestName {get; set;}
public int TestPositon {get; set;} //Position of Test node in XML file
public string TestValue {get; set;}
public string TestResult {get; set;}
}
现在我使用此代码将所有测试放入List<TestData>
doc = new XPathDocument(filePath);
nav = doc.CreateNavigator();
private List<TestData> GetAllTestData()
{
List<TestData> Datas = new List<TestData>();
TestData testData;
XPathNodeIterator it = nav.Select("/Document/Tests/Test/Name");
int pos = 1;
foreach(XPathNavigator val in it)
{
testData.TestPosition = pos;
testData = new TestData();
// This adds the Name, but what should I change to access Value and Result
// in the same nav ??
testData.TestName = val.Value;
Datas.Add(testData);
pos++; //Increment Position
}
return Datas;
}
因此,正如我在评论中所说,XPath 仅引用Name
节点,如何在迭代器的单个 foreach 中获取所有 3 个节点? 我的意思是如何分配这些东西:
testData.Value = ???
testData.Result = ???
谢谢!
使用 XPath
/Document/Tests/Test
它选择测试节点。 然后在foreach
使用XPathNavigator.SelectSingleNode
:
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++;
}
或者使用这个 XPath:
/Document/Tests/Test/*
它选择所有节点。
XPathNodeIterator it = nav.Select("/Document[Tests/Test/Name]");
这将返回所有包含测试/测试/名称的文档元素
现在您可以确定,如果您扫描文档 - 您将拥有 3 片叶子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.