我的目标是允许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();
}
}
答案 0 :(得分:1)
您有两个主要问题
1)您的else
语句尝试使用在if
语句中声明和创建的变量。也就是说,xwriter在else
中根本不存在,因为它本地化为代码的if
分支的范围。要在else
语句中使用它,它必须在if
语句之前声明,以便它可用于代码的if
和else
分支
2)您无法附加到XML文件。如果在if
语句之外创建xwriter,代码将编译并运行,但您的else
代码块将只覆盖xml文件的现有内容。
要根据需要附加到xml,您需要打开文件,寻找根/文档元素的结束标记开始的位置,然后使用xml编写器写入,以便它覆盖结束标记并形成新的,有效的xml。要关闭该文件,您必须附加原始文本,为根/文档元素添加新的结束标记,以使xml文件保持有效。
另一种(效率较低)方法是从文件加载XML,然后重写现有内容以及新数据。
(您也不需要检查文件是否存在两次)
答案 1 :(得分:0)
变量xwriter只在第一个if块中定义 - 你必须使它成为一个全局变量,以便在第二个块中定义它。
请注意,您使用的截断 xml文件的XmlTextWriter构造函数(如果存在),因此您必须切换到采用Stream参数的构造函数。
另请注意,您不应将WriteStartDocument写入现有文件...
总而言之,当您需要以递增方式将数据附加到现有文件时,Xml并不是很好 - 如果可能的话,请考虑切换到另一个文件。