繁体   English   中英

ASP .NET Core写入XML文件

[英]ASP .NET Core write to XML-file

在ASP .NET Core中,我尝试将一些带有属性的XML-Element添加到现有的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的完整路径:( 在这里阅读更多内容)

在ASP .NET Core上运行下面的完整代码将导致在尝试运行“xdoc.Save(pathToDataFile);”时“无法从String转换为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 4.5中都可以使用.NET Core,但情况并非总是如此。

在您的情况下,如果您在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来定义应该保存文档的文件路径。

您必须首先创建一个指向所需路径的启用写入的Stream ,然后将该Stream递给Save方法。 您可以查看完整的.NET框架实现以供参考。

我有同样的问题,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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM