gpt4 book ai didi

c# - 从 XML 中提取一小部分数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:52 25 4
gpt4 key购买 nike

我正在编写一个 C#/VB 程序,用于根据以 XML 形式收到的信息报告数据。

我的情况是我每个月都会收到很多 XML(大约 100-200 个)- 每个大小从 10mb 到 350mb 不等。对于这些 XML 中的每一个,我只需要其数据的一小部分(不到任何文件全部数据的 5%)即可生成必要的报告。

此外,该数据子集将始终保存在相同的键结构中(它可能存在于多个键中,并且可能处于不同级别,但它始终存在于相同的键名中/包含它的键将始终具有相同的属性,例如“名称”等)

所以,我目前的想法是:

  1. 创建一个“抓取器”,使用 XPath 从 XML 中提取必要的数据。
  2. 将一小部分必要数据与存储在单独表中的文件特征数据一起存储在 SQL Server 表中,以便了解这些抓取数据来自哪个文件
  3. 将数据查询到程序中以进行报告。

我在这里的主要问题是,什么是抓取数据的最佳方式?我最熟悉 XPath,但对于大小为 200MB 的多个文件,我担心整个文件加载时会出现性能问题。

我看到/研究过的其他东西是:

  1. 创建一个 XSLT 文件以仅从 XML 转换/提取我想要的数据
  2. 使用 Linq to XML
  3. 以某种方式将 XML 链接到 SQL 服务器,然后能够直接查询它们
  4. 使用 ADO 从程序中查询 XML
  5. 使用 XMLReader 类(而不是完全加载每个 XML)
  6. 也许已经有一个 native .Net 组件可以很好地完成这项工作

老实说,鉴于大量的 XML 和文件大小的巨大差异,我只是不知道标准是什么,而且我不熟悉任何其他执行此操作的方法 - 例如,将 XML 直接链接到 SQL Server/使用 ADO 查询 XML - 因此不知道它们可能的优点/缺点。

如果你们中的任何人遇到过类似情况,我将真的感谢任何指向正确方向的指示/至少验证我的方法不是最糟糕的方法: )

谢谢!!!

最佳答案

至于内存消耗和性能问题,.NET XML API 的一个很好的特性是您可以将 XmlReader 与 XPathDocument 或 XmlDocument 或 XElement 结合起来,只选择性地将文档的一部分读入内存,然后让 XPath 或 LINQ该部分可用的 XML 功能。 LINQ to XML 有 http://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.readfrom%28v=vs.110%29.aspx为此,DOM/XmlDocument 有 http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.readnode%28v=vs.110%29.aspx .因此,根据您的 XML 结构,您可以使用 XmlReader 快速向前读取 XML 而不会消耗太多内存,然后,当您拥有感兴趣的元素时,您可以将其读入 XElement (LINQ to XML) 或 XmlNode (DOM) 然后应用 LINQ to XML 和/或 XPath 来读取详细信息。

关于c# - 从 XML 中提取一小部分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269692/

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