У меня есть XML-файл, подобный этому:
<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>
Я создал класс для хранения данных для каждого Test
узла:
public class TestData
{
public string TestName {get; set;}
public float TestValue {get; set;}
}
И я читаю данные с использованием XPATHвот так (ztr
является экземпляром XmlDocument
И я уже знаю имя Test
, которое я собираюсь прочитать, поскольку оно было вставлено в ListView):
public TestData GetTestData(string testName)
{
TestData data = new TestData();
data.TestName = testName;
data.TestValue = float.Parse(ztr.SelectSingleNode("/Document/Tests/Test[Name = '" + testName + "')]/Value").InnerText, CultureInfo.InvariantCulture);
return data;
}
ТеперьПроблема состоит в том, что состоит в том, что если я хочу составить список данных как List<TestData>
, то каждый TestData относится только к первому вхождению узла Test в файле XML.Я имею в виду, что давайте представим, что у меня есть ListView, который уже заполнен по имени всех Test
узлов в моем XML-файле.в этом случае это выглядит примерно так:
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
}
Как я уже говорил Этот код не делает различий между Test
.Он просто возвращает первое вхождение Test
, поэтому результат для GetAllData()
будет:
Name Value
A 1
A 1
B 10
B 10
НО я хочу, чтобы это было похоже на
Name Value
A 1
A 2
B 10
B 20
Подскажите, пожалуйста, что я делаю не так?и как решить эту проблему?
PS Я написал все коды только здесь, в stackoverflow ... они не скомпилированы, просто представьте, что они работают нормально: D