我正在创建一个调查应用程序,并且无法从我编写的XML文件中读取,以在我的启动表单中显示启动文本以及在实际调查表单中显示问题。
我正在用XML编写我的问题和答案,以便通过简单地创建不同的XML并从中读取而不是对问题和答案进行硬编码来重用程序。这是我的XML结构:
<questions>
<splashText>
<text>Splash text displaying information and purpose of the survey goes here</text>
</splashText>
<question>
<type>ComboBoxControl</type>
<text>Blah blah blah?</text>
<choices>
<choice>Answer 1</choice>
<choice default="true">Answer 2</choice>
<choice>Answer 3</choice>
<choice>Answer 4</choice>
</choices>
<Required>true</Required>
</question>
..
..
</questions>
如何让我的程序从我的XML中读取并将启动文本放到我的启动表单上的文本框中?
答案 0 :(得分:1)
不可否认,我还没有对此进行测试,但一些健康的调试可能会指出您的解析代码存在缺陷。我认为这可能会解决它,但你应该在调试时立即在一个即时窗口查看你的XDocument查询,看看你是否得到了你期望的结果。
var xDocument = XDocument.Load(@"C:\Users\..\Survey.xml");
var questionList = xDocument
.Element("questions")
.Elements("question")
.Select(elem => new Questions
{
QuestionType = elem.Element("type").Value,
QuestionText = elem.Element("text").Value,
SplashScreenText = elem.Element("splashText").Value,
Choices = elem.Element("choices").Elements("choice").Select(ch =>
new Choice
{
AnswerChoice = ch.Value
}).ToArray()
}).ToList();
编辑: 当然,再看看,我注意到你的winforms代码从不调用XMLParser,而XMLParser实际上并没有返回Questions对象列表。在显示任何内容之前,您需要这样做。
答案 1 :(得分:0)
使用强类型模型而不是匿名类来读取XML,然后使用MVP模式绑定UI。它将更容易,它将使维护变得容易。
因此,当您启动应用程序(或点击“刷新”按钮)时,您将从XML文件中读取并根据读取的内容创建模型(对象)。您可以将这些问题存储在静态类或单例中。
之后,从Windows窗体中,您只需访问正确的模型并根据需要手动或使用DataBinding链接它。
我在Java中有类似的事情,这就是我解决它的方法。但是,我使用的是MVC模式,但MVC和MVP非常相似。
答案 2 :(得分:0)