【问题标题】:Add node in XML file crashes在 XML 文件中添加节点崩溃
【发布时间】:2014-11-22 22:22:14
【问题描述】:

我创建了一个 ping 应用程序,其中包含 ping 到 URL 的服务。 URL 列表存储在 XML 文件中。
当我在服务运行时尝试将新站点添加到我的 XML 时,我的应用程序崩溃了。

VS2010 说我的文件正在被其他进程使用,但我确信一切都很好。在我添加 XML 时,我的服务没有使用它。

但我想同时使用 XmlReader 和 XmlWriter 会崩溃。
我将使用 LINQ to XML 重写我的代码,但我想知道是否可以同时使用 XmlReader 和 XmlWriter?

private void saveSites(Site newSite)
{
    XmlDocument XDoc = new XmlDocument();
    bool fileExists = true;

    if (File.Exists("c:\\temp\\sites.xml") == false)
    {
        createXML();
        fileExists = false;
    }

    using (XmlReader XReader = XmlReader.Create("c:\\temp\\sites.xml"))
    { 
        XDoc.Load(XReader);

        if (fileExists == true)
        {
            XmlNode SiteNode = XDoc.CreateNode(XmlNodeType.Element, "site", "");

            XmlNode URLNode = XDoc.CreateNode(XmlNodeType.Element, "url", "");
            URLNode.InnerText = newSite.URL;

            XmlNode EmailNode = XDoc.CreateNode(XmlNodeType.Element, "email", "");
            EmailNode.InnerText = newSite.Email;

            SiteNode.AppendChild(URLNode);
            SiteNode.AppendChild(EmailNode);

            XDoc.DocumentElement.AppendChild(SiteNode);
        }
        else
        {
            foreach (Site site in sites)
            {
                XmlNode SiteNode = XDoc.CreateNode(XmlNodeType.Element, "site", "");

                XmlNode URLNode = XDoc.CreateNode(XmlNodeType.Element, "url", "");
                URLNode.InnerText= site.URL;

                XmlNode EmailNode = XDoc.CreateNode(XmlNodeType.Element, "email", "");
                EmailNode.InnerText = site.Email;

                SiteNode.AppendChild(URLNode);
                SiteNode.AppendChild(EmailNode);

                XDoc.DocumentElement.AppendChild(SiteNode);
            }
        }
        XDoc.Save("c:\\temp\\sites.xml");
    }
}

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    您的阅读器正在阻止写入,因为它位于 using 块中。我建议使用带有 uri 的 XmlDocument 对象的 Load 方法,而不是创建自己的阅读器。然后你也可以把初始化和写操作分开。

    【讨论】:

    • 无法插入 URI,但我使用了字符串,它工作正常,非常感谢!
    【解决方案2】:

    明确关闭您的 XMLReader。

    using (XmlReader reader = XmlReader.Create("file.xml"))
    {
      while (reader.Read())
      {
         ...
      }
      reader.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多