gpt4 book ai didi

asp.net-core - 如何在MVC核心(1.0.0)中读取xml文档?

转载 作者:行者123 更新时间:2023-12-03 07:47:03 25 4
gpt4 key购买 nike

我是 Web 编程新手,决定从 .net 4.5 切换到 .net core。

我的项目在以下位置有一个静态 xml 文档:

wwwroot/Countries/en-GB.xml

如何读取指定路径下的 xml 文件?最终我会将数据转换为 SelectList。

在 .net 4.5 中,我使用 DataSet 和 HttpConext...MapPath 来读取 xml 文档,该文档不再在核心 mvc 中工作。

非常欢迎任何建议。

最佳答案

首先不要将数据源放入 wwwroot 文件夹中,因为它是公开提供的。看看official docs :

The web root of your app is the directory in your project for public, static resources like css, js, and image files. The static files middleware will only serve files from the web root directory (and sub-directories) by default.

因此,将 Countries 文件夹移动到项目的根文件夹中。

要读取 xml 数据,可以使用 XmlSerializer。我将尝试展示如何读取 xml 文件:

首先我假设您有如下所示的 xml 内容:

<?xml version="1.0" encoding="UTF-8" ?>
<Container>
<Countries>
<Country>
<Code>Code1</Code>
<Title>Title1</Title>
</Country>

<Country>
<Code>Code2</Code>
<Title>Title2</Title>
</Country>
</Countries>
</Container>

首先描述类型

public class Country
{
public string Code { get; set; }
public string Title { get; set; }
}
public class Container
{
public Country[] Countries { get; set; }
}

之后创建一个用于 xml 反序列化的服务:

public interface ICountryService
{
Country[] GetCountries();
}
public class CountryService : ICountryService
{
private readonly IHostingEnvironment _env;
public CountryService(IHostingEnvironment env)
{
_env = env;
}
public Country[] GetCountries()
{
XmlSerializer ser = new XmlSerializer(typeof(Container));
FileStream myFileStream = new FileStream(_env.ContentRootPath + "\\Countries\\en-GB.xml", FileMode.Open);
return ((Container)ser.Deserialize(myFileStream)).Countries;
}
}

然后在ConfigureServices方法中注册服务:

    public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddSingleton<ICountryService, CountryService>();
}

最后注入(inject)并在任何地方使用它(例如在 Controller 中)

public class SomeController : Controller
{
public SomeController(ICountryService countryService)
{
// use it
}
}

关于asp.net-core - 如何在MVC核心(1.0.0)中读取xml文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com