xml - 如何在 Azure .Net Core Web App 中处理 XML
问题描述
我有这个问题来处理一个包含按状态索引的数据的大型 xml 文件。这个 >20 MB 的 XML 文件包含 50 个州的数据,每个州有多个元素。
<statefip><"a name:value data structure containing various characteristics"/></statefip>
我需要根据元素内部的数据生成可视化,一次一个状态。该文件是从数据提供者接收并定期更新的。我希望找到一种方法将这个 XML 保存在内存中,以便我的 API 使用 Xpath 来查询和获取一个状态的节点。为每个请求加载整个文件以过滤一个状态似乎非常浪费。
桌面上的各种选项包括:
- 把它放在redis缓存中。Redis 本身不支持 XML,因此我无法通过 Xpath 查询来读取相关数据。
- 创建一个数据库,以便可以使用 SQL 来读取某个状态的记录。我认为这些读取会影响性能。
我必须先将此文件翻译成另一种格式,然后才能使用它。此服务在 Azure 云中运行。
谢谢
解决方案
- 一种方法是将 XML 解构为 db 填充的关系结构,然后根据请求对其进行查询。20MB 的 XML 并不大,因为 XML 很冗长。
- 另一种选择是根据请求转换文件。请注意,您不必为每个请求加载 XML 文件。您已加载它(和 XSLT),从请求参数中填充参数,然后进行转换。
第二种方法可能很昂贵,但您可以将文件分割成更小的文件。这取决于信息是什么以及您将支持什么请求。
哪个最有效取决于数据大小和结构。数据库对于查询很有效,并且可以针对它进行优化。XSLT 有利于有效地将现有文档更改(转换)为另一个文档。
所以,如果你想保留文档的大部分内容,2会更好。
内容的 XPath 查询不太可能胜过等效结构的数据库查询,除非存在大量嵌套并且您不尝试优化数据库或查询。
我会为您的结果创建和 XSLT,并在决定之前对需要多长时间进行一些测试。
推荐阅读
- php - localhost 将我重定向到 404 magento 管理面板 url
- c# - 带有 netstandard 的 Xamarin Forms 项目:无法构建 UWP
- eclipse - 无法在登录中找到 email() 的元素 ID:错误(无法找到元素:{“method”:“id”,“selector”:“Email”})
- php - Laravel PHP:自定义代码写入位置
- symfony - Symfony 4 - 访问控制器内的参数
- r - 根据一列中的值对 R 数据框中的行进行排序
- javascript - IE9 上的 Javascript 导入/导出 csv 文件并发送到控制器
- c# - Decimal ToString 在不同的 PC 中返回不同的值
- ios - UITableView 出现缩略图错误
- css - 自定义 CSS 以删除 Wordpress 页面上的特定边距