gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:19:43 26 4
gpt4 key购买 nike

我有一个这样的 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/*

它选择所有节点。

关于c# - 如何使用 XPathNavigator 并返回不同的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com