首页 文章

ASP .NET Core写入XML文件

提问于
浏览
2

在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的完整路径:(阅读更多here

在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中运行良好?

2 回答

  • 3

    .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 方法 . 您可以查看full .NET framework implementation以供参考 .

  • 4

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

相关问题