如何从XML中读取并在文本框中显示并在Winform中标记

时间:2014-03-24 13:38:07

标签: c# xml winforms linq

我正在创建一个调查应用程序,并且无法从我编写的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中读取并将启动文本放到我的启动表单上的文本框中?

3 个答案:

答案 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)

  1. 如果您还没有从UI-注册到splash_load事件
  2. 那样做
  3. 在启动表单中添加标签(称之为lbl),并在读者到达启动文本元素时设置其文本。