c# XDocument.Root.Add 不添加任何元素
c# XDocument.Root.Add not adding any element
我有一个 XML 存储我的项目数据 (Projects.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 相同但元素名称不同但结构相同,代码正常工作我什至尝试从 [=28 中删除命名空间=] 文档,但结果是一样的。
我的代码哪里做错了?
谢谢
问题是每次访问 ProjectsDataFile
时,文件都是从磁盘加载的。
就在这里:
ProjectsDataFile.Root.Add(project);
这里:
ProjectsDataFile.Save(filePath);
详细:
a) 从磁盘加载文件,向其添加节点,但从未使用结果。您获得的 XDocument 将立即被垃圾回收。
b) 你再次从磁盘加载文件并立即将其保存在其他地方。
您应该改为:保留您加载的一个文件并继续对其进行操作。
var 文件 = 项目数据文件;
file.Root.Add(项目);
字符串文件路径 = @"...";
file.Save(文件路径);
我有一个 XML 存储我的项目数据 (Projects.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 相同但元素名称不同但结构相同,代码正常工作我什至尝试从 [=28 中删除命名空间=] 文档,但结果是一样的。
我的代码哪里做错了?
谢谢
问题是每次访问 ProjectsDataFile
时,文件都是从磁盘加载的。
就在这里:
ProjectsDataFile.Root.Add(project);
这里:
ProjectsDataFile.Save(filePath);
详细:
a) 从磁盘加载文件,向其添加节点,但从未使用结果。您获得的 XDocument 将立即被垃圾回收。
b) 你再次从磁盘加载文件并立即将其保存在其他地方。
您应该改为:保留您加载的一个文件并继续对其进行操作。
var 文件 = 项目数据文件; file.Root.Add(项目); 字符串文件路径 = @"..."; file.Save(文件路径);