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

C# 从XML中提取一小部分数据,c#,.net,xml,xslt,xpath,C#,.net,Xml,Xslt,Xpath,我正在编写一个C#/VB程序,用于根据XML中接收到的信息报告数据 我的情况是,我每月收到许多XML(大约100-200个)——每个XML的大小从10mb到350mb不等。对于这些XML中的每一个,我只需要其数据的一小部分(不到任何一个文件全部数据的5%),以便生成必要的报告 此外,该数据子集将始终保存在同一密钥结构中(它将存在于多个密钥中,可能处于不同的级别,但它将始终存在于相同的密钥名称中/包含它的密钥将始终具有相同的属性,如“名称”等) 因此,我目前的想法是: 创建一个“scraper”,

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

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

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

因此,我目前的想法是:

  • 创建一个“scraper”,使用XPath从XMLs中提取必要的数据
  • 将所需数据的一小部分与存储在单独表中的文件特征数据一起存储在SQL Server表中,以便知道这些刮取的数据来自哪个文件
  • 将数据查询到一个程序中进行报告
  • 我这里的主要问题是,什么是最好的方式来刮出这些数据? 我最熟悉XPath,但对于大小为200MB的多个文件,我担心在整个文件中加载时会出现性能问题

    我看到/研究过的其他事情包括:

  • 创建XSLT文件以仅从XML转换/提取所需的数据
  • 使用Linq转换XML
  • 以某种方式将XML链接到SQL server,然后能够直接查询它们
  • 使用ADO从程序中查询XML
  • 使用XMLReader类执行此操作(而不是完全加载每个XML)
  • 也许有一个本机的.Net组件已经做得很好了
  • 老实说,我只是不知道标准是什么,因为XML数量多,文件大小差异大,我不熟悉任何其他方法,例如,直接将XML链接到SQL Server/使用ADO查询XML,因此,不知道他们可能的优点/缺点

    如果你们中有人遇到过类似的情况,我将非常欣赏任何指向正确方向的指针/至少验证我的方法不是最差的:)


    谢谢

    至于内存消耗和性能问题,.NET XML API的一个很好的特性是,您可以将XmlReader与XPathDocument或XmlDocument或XElement结合起来,只选择性地将文档的一部分读入内存,然后在该部分提供XPath或LINQ to XML特性。LINQ到XML已经完成了这项工作,DOM/XmlDocument已经完成了这项工作。因此,根据您的XML结构,您可能能够使用XmlReader快速地向前读取XML,而无需消耗大量内存,然后,当您拥有感兴趣的元素时,您可以将其读入
    XElement
    (LINQ to XML)或
    XmlNode
    (DOM)中然后将LINQ应用于XML和/或XPath以读取详细信息

    至于内存消耗和性能问题,.NET XML API的一个很好的特性是,您可以将XmlReader与XPathDocument或XmlDocument或XElement结合起来,只选择性地将文档的一部分读入内存,然后在该部分提供XPath或LINQ to XML特性。LINQ到XML已经完成了这项工作,DOM/XmlDocument已经完成了这项工作。因此,根据您的XML结构,您可能能够使用XmlReader快速地向前读取XML,而无需消耗大量内存,然后,当您拥有感兴趣的元素时,您可以将其读入
    XElement
    (LINQ to XML)或
    XmlNode
    (DOM)中然后将LINQ应用于XML和/或XPath以读取详细信息

    太好了这正是我需要知道的!非常感谢。太好了这正是我需要知道的!非常感谢。