我需要阅读XML doc,如下面的示例(简短版本)
<root>
<data>
<_0>
<id>123</id>
<status>complete</status>
<datesubmitted>2014-07-07 10:35:45</datesubmitted>
<question1>10</question1>
<question2>Yes</question2>
<question3></question3>
</_0>
<_1>
<id>456</id>
<status>complete</status>
<datesubmitted>2014-07-07 11:05:45</datesubmitted>
<question1>10</question1>
<question2>Yes</question2>
<question3></question3>
</_1>
<_2>
<id>789</id>
<status>complete</status>
<datesubmitted>2014-07-07 12:15:45</datesubmitted>
<question1>10</question1>
<question2>Yes</question2>
<question3></question3>
</_2>
</data>
</root>
通过使用此处发布的建议,我使用的是LINQ to XML
XElement root = XElement.Load(@"c:\\Temp\\SurveyResponse.xml");
var data = from child in root.Elements("data").Elements()
select new
{
id = (int)child.Element("id"),
status = (string)child.Element("status"),
date = (string)child.Element("datesubmitted")
};
我有两个问题 如何在LINQ查询语句中不对其进行硬编码来提取问题
question1 = (string)child.Element("question1"),
question2 = (string)child.Element("question2"),
question3 = (string)child.Element("question3"),
我需要有能力构建一些问题集合,其中的问题将使用正确的索引进行提取。注意:问题全部整理出来但不一定从1开始。谢谢
答案 0 :(得分:1)
您可以将问题列表作为字典,问题编号为关键字。可以使用substring
从“问题... ”中的“ n ”位置开始,从节点名称中提取问题编号,例如:
var data = from child in doc.Root.Elements("data").Elements()
select new
{
id = (int)child.Element("id"),
status = (string)child.Element("status"),
date = (string)child.Element("datesubmitted"),
questions = child.Elements()
.Where(o => o.Name.LocalName.StartsWith("question"))
.ToDictionary(t => int.Parse(t.Name.LocalName.Substring(8)),
t => (string)t)
};
这样你可以通过它的数字/索引得到任何问题,例如:
var data1 = data.FirstOrDefault();
var question2 = data1.questions[2];