如果存在xml文件则执行某项任务

时间:2012-04-21 20:28:40

标签: c# xml

我的目标是允许xml文件编写一个新的xml文档(如果它不存在),如果它确实存在,则将元素添加到xml文件中。问题是如果在else if()语句之后给我一个错误,说“当前上下文中不存在xwriter”。感谢名单

到目前为止,我已经尝试了这个,但它没有用。

     private void button1(object sender, EventArgs e)
    {

        if (!File.Exists("doc.xml"))
        {
            XmlTextWriter xwriter = new XmlTextWriter("doc.xml", Encoding.UTF8);
            XmlWriterSettings settings = new XmlWriterSettings();
        }

        else if (File.Exists("doc.xml"))
        {
            xwriter.Formatting = Formatting.Indented;
            xwriter.WriteStartDocument();
            xwriter.WriteStartElement("myCourse");
            xwriter.WriteString("Test");
            xwriter.WriteEndElement();
        }

    }

2 个答案:

答案 0 :(得分:1)

您有两个主要问题

1)您的else语句尝试使用在if语句中声明和创建的变量。也就是说,xwriter在else中根本不存在,因为它本地化为代码的if分支的范围。要在else语句中使用它,它必须在if语句之前声明,以便它可用于代码的ifelse分支

2)您无法附加到XML文件。如果在if语句之外创建xwriter,代码将编译并运行,但您的else代码块将只覆盖xml文件的现有内容。

要根据需要附加到xml,您需要打开文件,寻找根/文档元素的结束标记开始的位置,然后使用xml编写器写入,以便它覆盖结束标记并形成新的,有效的xml。要关闭该文件,您必须附加原始文本,为根/文档元素添加新的结束标记,以使xml文件保持有效。

另一种(效率较低)方法是从文件加载XML,然后重写现有内容以及新数据。

(您也不需要检查文件是否存在两次)

答案 1 :(得分:0)

变量xwriter只在第一个if块中定义 - 你必须使它成为一个全局变量,以便在第二个块中定义它。

请注意,您使用的截断 xml文件的XmlTextWriter构造函数(如果存在),因此您必须切换到采用Stream参数的构造函数。

另请注意,您不应将WriteStartDocument写入现有文件...

总而言之,当您需要以递增方式将数据附加到现有文件时,Xml并不是很好 - 如果可能的话,请考虑切换到另一个文件。