gpt4 book ai didi

c# - 使用 LINQ to XML 从 XML 动态读取数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:18 24 4
gpt4 key购买 nike

我需要阅读 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 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开始。谢谢

最佳答案

您可以获得以问题编号为键的字典形式的问题列表。可以使用 substring 从“question...”中“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];

关于c# - 使用 LINQ to XML 从 XML 动态读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24939306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com