使用LINQ to XML从XML动态读取数据
本文关键字:XML 读取 数据 动态 to 使用 LINQ | 更新日期: 2023-09-27 18:14:44
我需要阅读XML文档看起来像下面的例子(简短版本)
<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到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开始。谢谢你
您可以将问题列表作为字典,以问题编号为键。问题号可以从节点名称中提取,使用substring
从"n"在" Question…"中的位置之后开始。",例如:
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];