解析非常大的 XML 文件并编组为 Java 对象

2023-11-23

我有以下问题:我有非常大的 XML 文件(例如 300+ Megs),我需要解析它们以便将它们的一些值添加到数据库中。这些文件的结构也非常复杂。我想使用 Stax Parser,因为它提供了一次仅拉解析(从而处理)XML 文件的一部分的良好可能性,因此不会将整个文件加载到内存中,但另一方面可以使用以下命令获取值Stax(至少在这些 XML 文件上)很麻烦,我需要编写大量代码。从后一个角度来看,如果我可以将 XML 文件编组为 Java 对象(就像 JAX-B 所做的那样),这将对我有很大帮助,但是这会一次性加载整个文件以及内存中的大量对象实例。

我的问题是,是否有某种方法可以按顺序提取解析(或部分解析)文件,然后仅将这些部分编组到 Java 对象,以便我可以轻松处理它们,而不会陷入内存困境?


我推荐 Eclipse EMF。但它也有同样的问题,如果你给它文件名,它会解析整个文件。虽然有一些选项可以减少加载量,但我并没有太在意,因为我们在 96 GB RAM 的机器上运行。 :)

不管怎样,如果您的 XML 格式定义良好,那么一种解决方法就是通过将整个文件分解为几个较小的(但仍然定义良好的)XML 片段来欺骗 EMF。然后一个接一个地输入每个片段。我不了解 JAX-B,但也许同样的解决方法也适用于那里。我会推荐这个,因为对于这么小的问题来说,EMF 太大了。

如果您的 XML 如下所示,请详细说明一下:

<tag1>
    <tag2>
        <tag3/>
        <tag4>
            <tag5/>
        </tag4>
        <tag6/>
        <tag7/>
    </tag2>

    <tag2>
        <tag3/>
        <tag4>
            <tag5/>
        </tag4>
        <tag6/>
        <tag7/>
    </tag2>
............
    <tag2>
        <tag3/>
        <tag4>
            <tag5/>
        </tag4>
        <tag6/>
        <tag7/>
    </tag2>
</tag1>

然后它可以分解为一个 XML,每个 XML 开头为<tag2>并以</tag2>。在java中,大多数解析器都会接受Stream,因此只需使用您想要的任何内容进行解析,为每个解析器创建一些StringStream或其他东西<tag2>循环并传递给 JAX-B 或 EMF。

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析非常大的 XML 文件并编组为 Java 对象 的相关文章

随机推荐

  • 如何在 Android 中设置持久/定期计划?

    如何在每个指定时间 例如每天凌晨 5 点 执行一个操作 可能是一个 Intent 它必须在设备重新启动后保留 类似于 cron 的工作原理 我不确定是否可以使用AlarmManager为此 我可以吗 如果您希望它在设备重新启动后保留 则必须
  • OmniAuth Railscast 教程中的 DangerousAttributeError:创建由 ActiveRecord 定义

    我看过ActiveRecord 危险属性错误以及 SO 上的其他类似线程 但它们没有解决相同的问题 我正在关注omniauth教程 http railscasts com episodes 235 omniauth part 1 view
  • C++ 使用 Boost.asio 和 Beast 库在正文中发送数据

    我必须使用 C 库将数据发送到我们公司的 REST Web 服务 我从 Boost 开始 Beast并给出示例hereUbuntu 16 04 环境中的 Code Blocks 下 该文档对我解决以下问题没有帮助 我的代码或多或少与示例相同
  • Pandas 数据框总行数

    我有一个数据框 类似于 foo bar qux 0 a 1 3 14 1 b 3 2 72 2 c 2 1 62 3 d 9 1 41 4 e 3 0 58 我想在数据框的末尾添加一个 总计 行 foo bar qux 0 a 1 3 14
  • 如何在 EF Core 中显示底层 SQL 查询?

    本次结束后 3 点 15 分 NET Core 2 0 发布 视频中 Diego Vega 展示了 Entity Framework Core 2 0 中新功能的演示 其中显示了底层 SQL 的转储在控制台应用程序中 我在 Stack Ov
  • 使用Matlab检测十字中心点

    你好 我有一张如上图所示的图片 我可以使用Matlab检测十字的中心点并输出结果吗 谢谢 干得好 我假设您有图像工具箱 因为如果没有 那么您可能不应该尝试做这类事情 然而 我相信所有这些功能都可以通过卷积来实现 我对上面显示的图像进行了此处
  • 执行 LeScan 时“蓝牙共享已停止工作”

    我面前有一堆不同的 Android 手机 它们都运行 4 3 4 4 它们似乎都遇到了蓝牙方面的一些错误 我正在运行的应用程序只是使用此回调扫描周围的其他蓝牙设备 http developer android com reference a
  • 使用 pandas read_csv 和 nrows 读取约 13000 行 CSV 文件的部分内容

    我正在尝试将 CSV 文件的片段读入 pandas DataFrame 当我将 nrows 设置为超过某个点时 我遇到了麻烦 我的 CSV 文件被分成具有不同标题 数据类型的不同段 因此我浏览了该文件并找到了不同段的行号 并保存了行号 当我
  • 如何加密 ASP.NET 网站中的查询字符串参数? [复制]

    这个问题在这里已经有答案了 在我的一个 ASP Net 网站中 我必须向用户提供一个链接 其中所有查询字符串参数都应加密 我的想法是使用命令 aspnet regiis 用于加密web configdata 将输出作为查询字符串传递到已发布
  • 可以从(完整)git-svn 克隆重新创建 svn 存储库吗?

    如标题所示 有没有办法使用 git svn 从完整克隆重建 svn 存储库 包含从 r1 开始的每个提交 Edit 我可能应该补充一点 我正在寻找一种实用的方法来做到这一点 近乎完美的副本是可以的 只要它仍然像原始 svn 存储库一样可用
  • xls 文档打开后 Apache POI 设置选定的单元格

    我们有下一种情况 我们的系统有 xls 格式的数据导出 这是一个包含许多行和列的巨大文件 用户下载并打开文档后 他会看到文档滚动到最后一列和最后一个电子表格选项卡 这非常烦人 最好将焦点设置在第一个选项卡和第一个单元格上 我做了简单的测试代
  • 通过 Parallel.ForEach 使用多线程依赖

    我使用 Simple Injector 作为我的 IoC 容器 SimpleInjector 使用这种简单的技术可以处理每个线程和每个 Web 请求的混合生活方式 container RegisterPerWebRequest
  • Laravel 5.2 登录会话不持久

    我一直在使用 Laravel 5 2 实现一个简单的身份验证系统Sentinel Route login success Sentinel authenticate array email gt email password gt pass
  • 如何加速 .NET winforms 渲染

    我有一系列表格并在它们之间导航 每个表单都有一组控件 我从 SQLite 数据库加载属性 这是一个很长 大约 1 秒 的操作 不会给用户最好的感觉 因为表单是逐渐绘制的 我不太介意延迟 但我希望在加载所有数据时绘制表单 我想避免新线程 因为
  • Oracle SQL如何编写一条sql语句来验证用户是否在我的网络中(即朋友或朋友的朋友)

    我有这个问题 给定一个users由社交网络中用户的用户名组成的表friends包含用户名和用户朋友名的表 如下所示 username friendname John Thomas Chris James 我正在尝试编写一条 SQL 语句 如
  • firebase 重定向到 URL 的云函数

    我正在尝试为我的移动应用程序创建下载端点 该应用程序可在应用程序商店和游戏商店中使用 我想要一个可供用户在 iOS 设备或 Android 设备上下载应用程序的 URL 我试图找出是否可以为此目的为 firebase 创建一个云函数 我正在
  • Rollup 是否可以保留文件和文件夹结构?

    我正在使用 ES6 导入并使用 Rollup 对其进行转译 输出是单个捆绑文件 Rollup 可以配置为生成文件到文件的转译结果吗 这是我正在使用的当前配置 它显然会输出一个文件 gulp task rollup function cons
  • Rails 4 授权 gem [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找 Rails 4 的授权 gem 以前我用康康舞 但现在看起来已经过时了 我在这里找到了 the rolehttps github com
  • 如何选择字符串多行?

    我在尝试着Select String在多行文本上 Example This is line1
  • 解析非常大的 XML 文件并编组为 Java 对象

    我有以下问题 我有非常大的 XML 文件 例如 300 Megs 我需要解析它们以便将它们的一些值添加到数据库中 这些文件的结构也非常复杂 我想使用 Stax Parser 因为它提供了一次仅拉解析 从而处理 XML 文件的一部分的良好可能