删除XML文件

时间:2016-11-20 15:48:15

标签: c# xml unity3d

解决问题

- 下面的代码有效,但是对于已经保存在XML文件中的问题不起作用,仅适用于在执行应用程序期间保存的那些.-

问题是没有发送标题字符串。

TitleTxtD.onClick.AddListener(delegate(){ Instance.DeleteXML(strTitle); });

我需要创建一个从XML文件中删除节点的函数。我尝试了一个代码(下面),但它不起作用,任何想法如何帮助我?我需要进入XML文件来查找和删除带有所需标题的问题,我不知道它是否是自动的,但我需要一起删除问题中的元素。

public void DeleteXML(string titulo){
        XmlDocument doc = new XmlDocument ();
        doc.Load ("Assets/Resources/Questions.xml");

        XmlNode qa = doc.SelectSingleNode ("QuestionCollection/Questions");
        XmlNode q = qa.SelectSingleNode ("Question[@titulo='"+titulo+"']");
        q.ParentNode.RemoveChild(q);
        doc.Save ("Assets/Resources/Questions.xml");
        //XmlNode root = doc.DocumentElement;
        Instance.LoadXML ();
    }

** LoadXML函数只会更新屏幕上的元素。

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<QuestionCollection>
  <Questions>
    <Start>
    </Start>
    <Question Titulo="bvc">
      <Enunciado>xcv</Enunciado>
      <Resposta1>xcv</Resposta1>
      <Resposta2>xcv</Resposta2>
      <Resposta3>xcv</Resposta3>
      <Resposta4>vxcv</Resposta4>
      <RespostaC>xcv</RespostaC>
    </Question>
  </Questions>
</QuestionCollection>

2 个答案:

答案 0 :(得分:1)

您还可以考虑使用更新的XML API,为您提供更清晰的语法:

var titulo = "bvc";
XDocument doc = XDocument.Load(your_path); 

var el2remove = doc.XPathSelectElement($"/QuestionCollection/Questions/Question[@Titulo='{titulo}']");
el2remove.Remove();

答案 1 :(得分:0)

XmlElement el = (XmlElement)doc.SelectSingleNode("/QuestionCollection/Questions/Question[@titulo='"+titulo+"']");
if(el != null) { el.ParentNode.RemoveChild(el); }