XML文件更新

时间:2015-07-24 12:41:50

标签: c# xml wpf linq

我目前正在使用登录系统实现wpf应用程序。连接服务器并调用数据库比基于文件的数据库慢,我们认为xml文件对我们来说很好。

我的问题实际上与本主题中提到的问题相同:

  

当我将它添加到项目中时,它会在应用程序根目录(WpfApplication1 \ WpfApplication1 \ myfile.xml)中查找它。但是当我运行应用程序时,负责添加节点的功能正常,但它将文件保存到WpfApplication1 \ WpfApplication1 \ bin \ Debug \目录!因此,"真实" myfile.xml未更新

WPF C# XML file added as resource

我尝试了注释"如果你想从光盘加载xml(并修改),请使用Build Action = None和Copy = Copy Always。" ,但它对我没用。

我使用System.Xml.Linq库,我尝试用这段代码更新我的XML文件:

  XDocument xmlDoc = XDocument.Load("users.xml");
               xmlDoc.Root.Add(
                    new XElement("user",
                        new XElement("username", this.textBox1.Text),
                        new XElement("password", this.textBox2.Text),
                        new XElement("ITAdmin", comboBox1.SelectedText == "Yes" ? 1 : 0)));

                xmlDoc.Save("users.xml");

我的第二个问题是我已将xml文件作为资源添加到我的项目中,因为我不希望它可以从应用程序用户访问,但我无法更新xml文件试。

2 个答案:

答案 0 :(得分:1)

如果您指定"始终复制",那么每次更新/发布您的网站时,您的XML文档都将被覆盖。

如果您希望将其作为数据库类型的文件,除非您对其进行了更改,否则不希望它被XML文件覆盖。 构建行动"无"很好,但我认为你希望复制到输出总监是"不要复制"。您需要手动将文件FTP到预期的目录。

然后,不要将XML文件放在资源中,而是将其放在 bin 文件夹中。您网站的访问者无权访问该网站。

答案 1 :(得分:0)

try this



 private void AddToXmlLogInInfoDoc()
            {
                var x = this.DataContext as ViewModel.ViewModel;
                string path = System.AppDomain.CurrentDomain.BaseDirectory + "users.xml";
                XDocument  doc;
                doc = XDocument.Load(path);
                XElement ele = new XElement("LogUpdate",
                        new XElement("Id",
                            new XAttribute("Id", IdL.Text)),
                        new XElement("Name",
                            new XAttribute("Name", NameL.Text)),
                        new XElement("Password",
                            new XAttribute("Password", txtPassword.Password.ToString())),
                        new XElement("Department",
                            new XAttribute("Department", DeptL.Text)),
                        new XElement("Time",
                            new XAttribute("Time", x.LogTime.ToString())),
                        new XElement("TotalTime",
                            new XAttribute("TotalTime", x.TotalTime.ToString())),
                        new XElement("Log",
                            new XAttribute("Log", x.Log.ToString())));
                doc.Root.Add(ele);
                SaveLoginInfoToDisk(doc);
            }
private string GetLoginInfoFilePath()
        {
            return System.AppDomain.CurrentDomain.BaseDirectory + "users.xml";
        }

        private void SaveLoginInfoToDisk(XDocument document)
        {
            document.Save(GetLoginInfoFilePath());
        }