ASP .NET Core 写入 XML-文件
ASP .NET Core write to XML-file
在 ASP .NET Core 中,我正在尝试向现有 XML 文件添加一些具有属性的 XML-元素。
在 ASP NET 4.5 中,我会使用下面的代码来实现它:
string path = Server.MapPath("~/Data/foo.xml");
XDocument xdoc = XDocument.Load(path);
//Do stuff with XElement and XAttributes...
xdoc.Save(path);
但是对于 ASP .NET Core,我不能使用 Server.MapPath(),所以我使用 IHostingEnvironment 获取完整路径:(阅读更多 here)
运行 下面 ASP .NET Core 上的完整代码在尝试 运行 "xdoc.Save(pathToDataFile);" 时将导致 "Cannot convert from String to System.IO.Stream" ??
var contentRoot = hostingEnvironment.ContentRootPath;
string pathToDataFile = contentRoot + "\Data\foo.xml";
XDocument xdoc = XDocument.Load(pathToDataFile);
//Do stuff with XElement and XAttributes...
xdoc.Save(pathToDataFile);
为什么 "xdoc.Save()" 在 ASP .NET Core 中不工作但在 .NET 4.5 中工作正常?
.NET Core 中可用的 API 是完整 .NET 框架中可用 API 的子集。在某些领域,您会发现 .NET Core 中几乎包含 .NET 4.5 中的所有内容,但情况并非总是如此。
对于您的情况,如果您使用 Visual Studio 查看 Save
方法的哪些重载可用,您会发现这些重载:
public void Save(Stream stream);
public void Save(TextWriter textWriter);
public void Save(XmlWriter writer);
public void Save(Stream stream, SaveOptions options);
public void Save(TextWriter textWriter, SaveOptions options);
编译错误的原因现在很清楚了。在 .NET Core 中,没有接受 string
定义应保存文档的文件路径的重载。
您必须首先创建指向所需路径的 write-enabled Stream
,然后将 Stream
传递给 Save
方法。你可以看看full .NET framework implementation作为参考。
我遇到了同样的问题,FileStream 对我有用。
FileStream fileStream = new FileStream("file.xml", FileMode.Create);
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true};
XmlWriter writer = XmlWriter.Create(fileStream, settings);
记得使用以下代码行来防止文件被截断。
writer.Flush();
fileStream.Flush();
在 ASP .NET Core 中,我正在尝试向现有 XML 文件添加一些具有属性的 XML-元素。
在 ASP NET 4.5 中,我会使用下面的代码来实现它:
string path = Server.MapPath("~/Data/foo.xml");
XDocument xdoc = XDocument.Load(path);
//Do stuff with XElement and XAttributes...
xdoc.Save(path);
但是对于 ASP .NET Core,我不能使用 Server.MapPath(),所以我使用 IHostingEnvironment 获取完整路径:(阅读更多 here)
运行 下面 ASP .NET Core 上的完整代码在尝试 运行 "xdoc.Save(pathToDataFile);" 时将导致 "Cannot convert from String to System.IO.Stream" ??
var contentRoot = hostingEnvironment.ContentRootPath;
string pathToDataFile = contentRoot + "\Data\foo.xml";
XDocument xdoc = XDocument.Load(pathToDataFile);
//Do stuff with XElement and XAttributes...
xdoc.Save(pathToDataFile);
为什么 "xdoc.Save()" 在 ASP .NET Core 中不工作但在 .NET 4.5 中工作正常?
.NET Core 中可用的 API 是完整 .NET 框架中可用 API 的子集。在某些领域,您会发现 .NET Core 中几乎包含 .NET 4.5 中的所有内容,但情况并非总是如此。
对于您的情况,如果您使用 Visual Studio 查看 Save
方法的哪些重载可用,您会发现这些重载:
public void Save(Stream stream);
public void Save(TextWriter textWriter);
public void Save(XmlWriter writer);
public void Save(Stream stream, SaveOptions options);
public void Save(TextWriter textWriter, SaveOptions options);
编译错误的原因现在很清楚了。在 .NET Core 中,没有接受 string
定义应保存文档的文件路径的重载。
您必须首先创建指向所需路径的 write-enabled Stream
,然后将 Stream
传递给 Save
方法。你可以看看full .NET framework implementation作为参考。
我遇到了同样的问题,FileStream 对我有用。
FileStream fileStream = new FileStream("file.xml", FileMode.Create);
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true};
XmlWriter writer = XmlWriter.Create(fileStream, settings);
记得使用以下代码行来防止文件被截断。
writer.Flush();
fileStream.Flush();