SAX 解析器可以在 Java 中使用 XPath 吗?

2024-01-14

我正在尝试迁移我的一个使用的类DOM解析有很多XPath表达式到SAX解析。DOM解析对我来说很好,但我尝试解析的一些文件太大,导致服务器超时。我想重复使用XPathSAX解析但我不确定是否可能,如果不可能请你帮助我,因为我不知道当我仅使用以下代码时会如何SAX:

Document doc = bpsXml.getDocument();
String supplierName = BPSXMLUtils.getXpathString(doc, "/Invoice/InvoiceHeader/Party[@stdValue='SU']/Name/Name1");
String language = BPSXMLUtils.getXpathString(doc, "/Invoice/InvoiceHeader/InvoiceLanguage/@stdValue");

仅仅使用 SAX 解析器不会在内存中构建 XML 树的表示(这就是 SAX 内存效率更高的原因)。它只会在遇到新的 XML 元素时触发“事件”。您必须将上下文(通常是一堆父元素)保留在内存中才能“知道”您在树中的位置。

由于内存中没有树,因此您将无法使用 XPath。您只能测试当前“上下文”(您的手动托管堆栈)来查询您的文档。请记住,SAX 解析器只会对您的文件执行一次运行,因此文件中的顺序很重要。

幸运的是,还有其他方法,例如VTD-XML http://vtd-xml.sourceforge.net/这是一个在内存中构建XML树的库,但只是结构部分,它不会从文件中提取实际内容,内容是根据需要提取的。它比 DOM 解析器具有更高的内存效率,同时仍然允许 XPath。我个人在工作中使用这个库通过 XPath 解析大约 700MB 的 XML 文件(是的,这很疯狂,但它确实有效,而且速度非常快。)

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

SAX 解析器可以在 Java 中使用 XPath 吗? 的相关文章

随机推荐

  • setInterval和clearInterval,如何只运行1次?

    我只想运行该函数 1 次 timerA setInterval function codes clearInterval timerA 2000 我只想调用 setInterval 内的函数 1 次 我该如何使用 setInterval 和
  • 添加新 UIWindow 时以编程方式隐藏状态栏?

    当显示我自己的自定义警报时 我目前正在向我的应用程序添加一个新的 UIWindow 在添加此 UIWindow 之前 我的应用程序隐藏了状态栏 但现在它是可见的 如何在这个新窗口中以编程方式隐藏状态栏 我已经尝试了一切 但它不起作用 这就是
  • (在哪里)clang 是否记录了实现定义的行为?

    C 中实现定义的行为是未指定的行为 每个符合要求的实现都必须记录其选择 我很容易找到 gcc 的此类文档here https gcc gnu org onlinedocs gcc 5 3 0 gcc C Implementation htm
  • 无法从 RTCPeerConnection 获取 IP V4 地址 - chrome

    我需要从 Web 应用程序获取客户端本地 IP 地址 为此 我使用标准 RTCPeerConnection 实现来获取 但是返回的ice候选并不携带IP V4地址 而是一个看起来像guid的地址 asdf xxxx saass xxxx l
  • 如何让我的 Perl 脚本对子进程使用多个核心?

    我正在研究一个数学模型 该模型使用 XFOIL 生成的数据 XFOIL 是一种流行的航空航天工具 用于查找机翼的升力和阻力系数 我有一个 Perl 脚本 它使用不同的输入参数重复调用 XFOIL 以生成我需要的数据 我需要 XFOIL 运行
  • 使用ansible playbook执行curl -X

    我想使用 ansible playbook 执行下一个命令 curl X POST email protected cdn cgi l email protection H Content Type application json htt
  • SQL Server 的 LIMIT 和 OFFSET 等效吗?

    在 PostgreSQL 中有Limit and Offset关键字将允许非常轻松地对结果集进行分页 SQL Server 的等效语法是什么 SQL Server 2012 中现在可以轻松实现此功能 从 SQL Server 2012 开始
  • 将 mysql 值赋给变量 inline

    为什么这不起作用我试图获取之前和当前的值来计算百分比变化 我正确地得到了两个值 但现在我如何重用它们来进行数学运算 当我尝试下面的命令时我得到 错误 1054 42S22 字段列表 中存在未知列 currentVal SELECT IFNU
  • 构建有关使用 Sun 专有 API 的警告

    我正在尝试清理我的构建环境 并发现了一些关于使用 Sun 专有 API 的警告 javac workspace
  • 为什么谷歌主页使用 (0, obj.func)(args) 语法?

    有时我盯着google com主页提供的js 发现他们倾向于使用 0 obj func args 句法 以下是脚本的摘录 var function var window this try mb function a return 0 win
  • 直到达到停止值为止的骰子数量

    我正在尝试计算骰子掷出的次数 直到达到明确的停止值 例如 我希望停止值为 100 我正在编写以下代码 sumofsides lt function stopvalue totalsum lt 0 while totalsum lt stop
  • Fabric.js 使用旋转手柄将旋转限制为 x 度

    我正在使用 Fabric js 并尝试使用旋转手柄允许画布上的任何对象旋转 不是自由 360 度 而是一次只能旋转 15 度 我非常努力地搜索 但到目前为止找不到答案 这可能吗 更短的解决方案 canvas on object rotati
  • ionic 4 - 添加插件时未捕获类型错误

    我创建了一个离子项目 版本 4 0 6 添加插件 cordova plugin x socialsharing 后出现以下错误https beta ionicframework com docs native social sharing
  • Phalcon PHP - 表单和模型验证

    Phalcon 支持 2 个验证组件 Phalcon Validation Validator Phalcon Mvc Model Validator 我不知道如何在我的情况下使用它们 我有一张注册表 其中包含 csrf username
  • Google Admin SDK - 服务帐户无法访问资源

    我已通过 console developers google com 创建了服务帐户客户端 生成的密钥 p12 证书 启用 DwD 等等 然后我继续在管理员中担任描述者API参考 https developers google com id
  • OpenLayers 3 图像和文本样式 zindex

    我注意到文本和图像样式在渲染时似乎不遵守其图层顺序 例如 当具有这些样式的许多要素靠近时 所有文本都会呈现在其他重叠矢量要素之上 有没有办法禁用或覆盖这种行为 谢谢 myFeature setStyle new ol style Style
  • LINQ - 按名称分组到 Dictionary>

    我正在构建一个图书馆应用程序 我有一个书籍列表 其中一些书籍的名称重复 同一本书的副本很少 我想将列表转换为 Dictionary gt 其中字符串是一本书的名称 列表将包含具有该名称的所有 Book 对象 我已经做到了这一点 var re
  • 在安装过程中使用 Inno Setup 删除未随 Inno Setup 安装的其他应用程序

    我有一个旧的 VB6 应用程序 它是使用非常旧的 16 位版本的 InstallShield 部署的 我已经使用 Inno Setup 创建了一个新的安装程序 以便通过更新对我的 VB6 应用程序进行 64 位友好 我的所有用户都已安装现有
  • 滚动时透明导航栏可见

    我看到一个透明的主题导航栏 向下滚动时效果非常好 这是向下滚动时发生的情况 不透明度从 0 变为 100 导航栏固定容器高度变小 颜色 fff 变成颜色 000 这是该主题演示页面的直接链接 http www awerest com dem
  • SAX 解析器可以在 Java 中使用 XPath 吗?

    我正在尝试迁移我的一个使用的类DOM解析有很多XPath表达式到SAX解析 DOM解析对我来说很好 但我尝试解析的一些文件太大 导致服务器超时 我想重复使用XPath与SAX解析但我不确定是否可能 如果不可能请你帮助我 因为我不知道当我仅使