簡體   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