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