首页 > 解决方案 > 如何在 Azure .Net Core Web App 中处理 XML

问题描述

我有这个问题来处理一个包含按状态索引的数据的大型 xml 文件。这个 >20 MB 的 XML 文件包含 50 个州的数据,每个州有多个元素。

<statefip><"a name:value data structure containing various characteristics"/></statefip>

我需要根据元素内部的数据生成可视化,一次一个状态。该文件是从数据提供者接收并定期更新的。我希望找到一种方法将这个 XML 保存在内存中,以便我的 API 使用 Xpath 来查询和获取一个状态的节点。为每个请求加载整个文件以过滤一个状态似乎非常浪费。

桌面上的各种选项包括:

  1. 把它放在redis缓存中。Redis 本身不支持 XML,因此我无法通过 Xpath 查询来读取相关数据。
  2. 创建一个数据库,以便可以使用 SQL 来读取某个状态的记录。我认为这些读取会影响性能。

我必须先将此文件翻译成另一种格式,然后才能使用它。此服务在 Azure 云中运行。

谢谢

标签: xmlazurexpath.net-corearchitecture

解决方案


  1. 一种方法是将 XML 解构为 db 填充的关系结构,然后根据请求对其进行查询。20MB 的 XML 并不大,因为 XML 很冗长。
  2. 另一种选择是根据请求转换文件。请注意,您不必为每个请求加载 XML 文件。您已加载它(和 XSLT),从请求参数中填充参数,然后进行转换。

第二种方法可能很昂贵,但您可以将文件分割成更小的文件。这取决于信息是什么以及您将支持什么请求。

哪个最有效取决于数据大小和结构。数据库对于查询很有效,并且可以针对它进行优化。XSLT 有利于有效地将现有文档更改(转换)为另一个文档。

所以,如果你想保留文档的大部分内容,2会更好。

内容的 XPath 查询不太可能胜过等效结构的数据库查询,除非存在大量嵌套并且您不尝试优化数据库或查询。

我会为您的结果创建和 XSLT,并在决定之前对需要多长时间进行一些测试。


推荐阅读