[英]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.