Этот xml довольно ... ужасен. Моим первым предложением было бы запустить его через преобразование xslt, чтобы получить что-то более нормальное, которое можно загрузить с помощью Load
. В настоящее время он злоупотребляет пространствами имен ужасно .
В качестве альтернативы, забудьте DataSet
и проанализируйте его с XmlDocument
или аналогичным.
Вот подход, использующий XmlDocument
(и использующий LINQ только для среднего значения, чтобы сохранить несколько строк кода):
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlElement el in doc.SelectNodes("//responce")) {
Console.WriteLine(el.ParentNode.Name + "=" + el.InnerText);
}
XmlNodeList fiveAnswers = doc.SelectNodes(
"/Survey/ClientResponces/Question5/*/responce");
double avg = fiveAnswers.Cast<XmlElement>()
.Average(el => int.Parse(el.InnerText));
Console.WriteLine(avg);
Например, normal xml:
<question num="1">
<response>1</response>
</question>
...
<question num="5">
<response num="1">1</response>
<response num="2">3</response>
...
</question>
или что-то сопоставимое. Не используйте имя элемента для определения личности.