【问题标题】:Appending an XML Document with elements from another XML Document in C#在 C# 中使用来自另一个 XML 文档的元素附加一个 XML 文档
【发布时间】:2015-11-03 01:27:50
【问题描述】:

我正在尝试构建一个自动测试评分应用程序,我希望最终结果是一个 savefiledialog 提示,允许评分者将新的 xml 文件保存到任何位置。

诀窍是我需要输出 xml 来包含原始测试 + 来自答案键的附加答案 + 最终成绩。这是我到目前为止所拥有的,但我遇到了一个错误。我对 .appendchild() 不熟悉,所以我认为这就是我的问题所在。

    private void cbOutput_Click(object sender, EventArgs e)
    {
        XmlNode rootTest = xmlAnswers.DocumentElement;
        XmlNode rootKey = xmlAnswerKey.DocumentElement;

        XmlNodeList nodeListTest = rootTest.SelectNodes("//answer");

        foreach (XmlNode item in nodeListTest)
        {
            XmlNode importNode = rootTest.OwnerDocument.ImportNode(rootKey, true);

            item.AppendChild(importNode);
        }

        SaveFileDialog savefiledialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "XML Files|*.XML";
        saveFileDialog1.Title = "Choose Location to Save Graded Test";

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (!string.IsNullOrEmpty(savefiledialog1.FileName))
            using (Stream s = File.Open(savefiledialog1.FileName, FileMode.Create))
            using (StreamWriter sw = new StreamWriter(s))
            {
                sw.Write(rootTest + tbTotal.Text);
            }
        }

【问题讨论】:

标签: c# xml forms visual-studio


【解决方案1】:

我很难理解您的代码,因为它是.Net 3.5 XML 代码之前的代码。当 3.5 发布时,我开始使用 C#。似乎您正在为测试中的每个答案添加键?从你写的描述来看没有意义。但如果这是你的目标,你可以试试这个。

如果您可以使用 .Net 3.5,则使用 XElement / XDocument,使用 these converters

XElement test = xmlAnswers.ToXElement();
XElement keys = xmlAnswerKey.ToXElement();

test.Descendants("answer")
    .ToList()
    .ForEach(a => a.Add(new XElement(keys))); // Add clone of keys to each answer
// Dialog stuff
test.Save(savefiledialog1.FileName);

或者,使用您的描述(我将不得不尝试弥补您应该做的事情,因为您的 XML 对我们隐藏)。

XElement test = xmlAnswers.ToXElement();
XElement keys = xmlAnswerKey.ToXElement();

test.Add(keys.Descendants("answer").ToList()); // Add Answers to test
test.Add(new XElement("finalgrade", "A")); // Add final grade
// Dialog stuff
test.Save(savefiledialog1.FileName);

PS,不要在

之外进行所有转换,添加答案等
if (saveFileDialog1.ShowDialog() == DialogResult.OK)

否则,如果不是OK,那么您就是在浪费用户的时间。

【讨论】:

  • 谢谢查克。我正在尝试从答案键中提取答案并将它们附加到测试 xml 中。这是我的答案:15%A
  • @BrandonMR 如果您的TestKey 在您的xmlAnswerKey 变量中,那么我写的第二部分可能对您有用。如果没有,您可能需要使用两个文件的示例 XML 来调整您的帖子,以便我们可以更好地为您提供帮助。
  • @BrandonMR 还添加一个最终 XML 应该是什么样子的示例。
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2011-03-03
  • 2018-04-11
相关资源
最近更新 更多