我无法将节点添加到右侧元素内的 XML 文件

I can not add a node to the XML file within the right element

当我保存一个新的 Question 元素时,我需要它位于 questions 元素内,而 questions 元素又位于 QuestionCollection 内,但我保存新元素的方式在 questions 之外,以后不会阅读. XML 如何获得:(ABA 是新元素)

<?xml version="1.0" encoding="UTF-8"?>
<QuestionCollection>
    <Question Titulo="ABA">
      <Enunciado>ABB</Enunciado>
      <Resposta1>ABC</Resposta1>
      <Resposta2>ABD</Resposta2>
      <Resposta3>ABE</Resposta3>
      <Resposta4>ABF</Resposta4>
      <RespostaC>ABC</RespostaC>
    </Question>
  <Questions>
    <START>
    </START>
    <Question Titulo="AAA">
      <Enunciado>AAB</Enunciado>
      <Resposta1>AAC</Resposta1>
      <Resposta2>AAD</Resposta2>
      <Resposta3>AAE</Resposta3>
      <Resposta4>AAF</Resposta4>
      <RespostaC>AAF</RespostaC>
    </Question>
  </Questions>
</QuestionCollection>

我应该怎么住:

<?xml version="1.0" encoding="UTF-8"?>
<QuestionCollection>
  <Questions>
    <START>
    </START>
    <Question Titulo="AAA">
      <Enunciado>AAB</Enunciado>
      <Resposta1>AAC</Resposta1>
      <Resposta2>AAD</Resposta2>
      <Resposta3>AAE</Resposta3>
      <Resposta4>AAF</Resposta4>
      <RespostaC>AAF</RespostaC>
    </Question>
    <Question Titulo="ABA">
      <Enunciado>ABB</Enunciado>
      <Resposta1>ABC</Resposta1>
      <Resposta2>ABD</Resposta2>
      <Resposta3>ABE</Resposta3>
      <Resposta4>ABF</Resposta4>
      <RespostaC>ABC</RespostaC>
    </Question>  
</Questions>
</QuestionCollection>

部分代码

XmlDocument doc = new XmlDocument ();
doc.Load ("Assets/Resources/Questions.xml");

XmlNode root = doc.DocumentElement;

XmlElement q = doc.CreateElement ("Question");
q.InnerText = Question;

XmlNode qa = doc.SelectSingleNode ("QuestionCollection/Questions/START");

root.InsertAfter(q,qa);

doc.Save ("Assets/Resources/Questions.xml");
Instance.CloseWindow ();

错误:ArgumentException:引用节点不是该节点的子节点。

假设您没有在上面的代码中输入错误,我想我知道发生了什么。

您的 XML 结构将 QuestionCollection 作为元素,而您的 SelectSingleNode 调用具有 QuestionsCollection。这将导致 qa 节点为空。

InsertAfter 方法中包含处理引用节点为空的逻辑。它会将新元素作为根元素的子元素插入到列表的开头 (https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.insertafter(v=vs.110).aspx)

这似乎就是这里发生的事情。从您的 SelectSingleNode 参数中删除多余的 s,您应该没问题。

@Marshall Tigerus 是正确的,但还有更多;

改变这个:

XmlElement q = doc.CreateElement("Question");
q.InnerText = Question;

XmlNode qa = doc.SelectSingleNode("QuestionCollection/Questions");
XmlNode start = qa.SelectSingleNode("START");

qa.InsertAfter(q,start);