gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:56:41 25 4
gpt4 key购买 nike

我正在尝试将我的一个使用 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这是一个在内存中构建XML树的库,但只是结构部分,它不会从文件中提取实际内容,内容是根据需要提取的。它的内存效率比 DOM 解析器高得多,同时仍然允许 XPath。我个人在工作中使用这个库来用 XPath 解析大约 700MB 的 XML 文件(是的,这很疯狂,但它确实有效,而且速度非常快。)

关于java - SAX 解析器可以在 Java 中使用 XPath 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791600/

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