-1

嗨,我的目标是允许 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();
        }

    }
4

2 回答 2

1

你有两个主要问题

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

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

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

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

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

于 2012-04-21T20:43:11.467 回答
0

变量 xwriter 仅在第一个 if 块内定义 - 您必须将其设为全局变量才能在第二个块中定义。

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

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

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

于 2012-04-21T20:42:29.720 回答