繁体   English   中英

c# XDocument.Root.Add 不添加任何元素

[英]c# XDocument.Root.Add not adding any element

我有一个存储我的项目数据 (Projects.xml) 的 XML,它的结构是这样的:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<projects xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:\Users\tima\Desktop\ProjectSchema.xsd">
  
  <project>
    <wpcode>00-01</wpcode>
    <wpname>New Office Floor Construction</wpname>
  </project>

  <project>
    <wpcode>00-02</wpcode>
    <wpname>Office Ground Floor Refurbushing</wpname>
  </project>

  <project>
    <wpcode>00-03</wpcode>
    <wpname>Warehouse Utilities</wpname>
  </project>

  <project>
    <wpcode>00-04</wpcode>
    <wpname>Warehouse Security Upgrade</wpname>
  </project>

  <project>
    <wpcode>00-05</wpcode>
    <wpname>Warehouse Racks Installation</wpname>
  </project>
  
</projects>

我正在尝试向此 xml 添加新项目,但代码未向此文件添加任何元素。

我将新元素添加到 xml 文件的代码是:

static class Program
{
    static public string AppRoot
    {
        get
        {
            return AppDomain.CurrentDomain.BaseDirectory;
        }
    }
}

public static class AppDataConfig
{
    /// <summary>
    /// The application root folder of the data files.
    /// </summary>
    public static string DataFilePath = "Data Files";
}

public static class ProjectXmlEngine
{
    static string fileName = "Projects";
    static string fileType = "xml";
    public static XNamespace ns = ProjectsDataFile.Root.GetDefaultNamespace();
    public static XName tagProject = ns + "project";
    public static XName tagProjCode = ns + "wpcode";
    public static XName tagProjName = ns + "wpname";

    /// <summary>
    /// The XML document containing all projects data.
    /// </summary>
    public static XDocument ProjectsDataFile
    {
        get
        {
            string fullPath;
            fullPath = GetProjectsFilePath();
            return File.Exists(fullPath) ? XDocument.Load(fullPath) : null;
        }
    }

    static string GetProjectsFilePath()
    {
        return Program.AppRoot + AppDataConfig.DataFilePath
            + @"\" + fileName + "." + fileType;
    }

    public static bool AddProject(Project whichProject)
    {
        XElement project =
            new XElement(tagProject,
                new XElement(tagProjCode, "00-06"/*whichProject.wProjectCode*/),
                new XElement(tagProjName, "sample data"/*whichProject.ProjectName*/));
        
        ProjectsDataFile.Root.Add(project);
        string filePath = @"D:\Programing\Visual Studio 2013\Projects\Procurment System\Procurment Application\bin\Debug\Data Files\Projects (Saved).xml";
        ProjectsDataFile.Save(filePath);
        
        return true;
    }
}

当我运行代码时,生成的文件与源文件相同,并且代码没有添加我正在输入的新元素。

我用与此类似的代码制作了另一个应用程序,XML 相同,但元素名称不同,但结构相同,代码正在运行,我什至尝试从 XML 文档中删除命名空间,但结果相同。

我的代码做错了什么?

谢谢

问题在于,每次访问ProjectsDataFile ,都会从磁盘加载文件。

就在这里:

ProjectsDataFile.Root.Add(project);

和这里:

ProjectsDataFile.Save(filePath);

详细:

a) 从磁盘加载文件,向其中添加节点,但从不使用结果。 您获得的 XDocument 将立即被垃圾回收。

b)您再次从磁盘加载文件并立即将其保存在其他地方。

您应该做的是:保留您加载的一个文件并继续对其进行操作。

var 文件 = 项目数据文件; file.Root.Add(project); string filePath = @"..."; 文件。保存(文件路径);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM