C# 如何访问具有相同父节点的不同XML节点?
我有这样一个XML文件:C# 如何访问具有相同父节点的不同XML节点?,c#,xml,linq,xpath,xmldocument,C#,Xml,Linq,Xpath,Xmldocument,我有这样一个XML文件: <Document> <Tests> <Test> <Name>A</Name> <Value>1</Value> </Test> <Test> <Name>A</Name> <Value>2</Val
<Document>
<Tests>
<Test>
<Name>A</Name>
<Value>1</Value>
</Test>
<Test>
<Name>A</Name>
<Value>2</Value>
</Test>
<Test>
<Name>B</Name>
<Value>10</Value>
</Test>
<Test>
<Name>B</Name>
<Value>20</Value>
</Test>
</Tests>
</Document>
我使用XPATH读取数据,如下所示(ztr
是XmlDocument
的实例,我已经知道我将要读取的Test
的名称,因为它已被填充到ListView中):
现在,问题是如果我想将数据列表设为list
每个TestData只引用XML文件中第一个出现的Test节点。我的意思是让我们想象一下,我有一个ListView,它已经由xml文件中所有Test
节点的名称填充。在这种情况下是这样的:
ListView=A,A,B,B
然后我将所有名称复制到字符串[]数组中
我用这段代码一次读完了所有的内容:
private List<TestData> GetAllData()
{
List<TestData> Datas = new List<TestData>();
TestData data;
foreach(string test in stringOfNames)
{
data = new TestData;
data = GetTestData(test);
Datas.add(data);
}
return Datas
}
但我希望它像
Name Value
A 1
A 2
B 10
B 20
你能告诉我我做错了什么吗?如何解决这个问题
另外,我在stackoverflow中编写了这里的所有代码……它们没有被编译,想象它们工作正常:D修改您的
GetTestData()
方法(以及相应的调用方):
我认为,与其使用
SelectSingleNode
,不如使用当前的xpath。您必须重新编写GetTestData
方法来处理通过XmlNodeList
的迭代,以解析出正确的float
值。。。。你想要累计值吗?
private List<TestData> GetAllData()
{
List<TestData> Datas = new List<TestData>();
TestData data;
foreach(string test in stringOfNames)
{
data = new TestData;
data = GetTestData(test);
Datas.add(data);
}
return Datas
}
Name Value
A 1
A 1
B 10
B 10
Name Value
A 1
A 2
B 10
B 20
public TestData GetTestData(string testName, int pos)
{
TestData data = new TestData();
data.TestName = testName;
data.TestValue
= float.Parse(
ztr.SelectSingleNode("/Document/Tests/Test[Name = '" + testName + "')][" + pos + "]/Value").InnerText, CultureInfo.InvariantCulture);
return data;
}