Nik*_*hev 5 java xml xpath dom sax
我正在尝试迁移我的一个类,它使用DOM带有大量XPath表达式的SAX解析来解析.DOM解析对我来说很好,但我尝试解析的一些文件太大而导致服务器超时.我想重用XPath与SAX解析,但我不知道是否有可能,如果没有可能的,你可以请帮助我,因为我不知道下面的代码怎么会当我只使用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");
Run Code Online (Sandbox Code Playgroud)
简单地使用 SAX 解析器不会在内存中构建 XML 树的表示(这就是 SAX 内存效率更高的原因)。它只会在遇到新的 XML 元素时触发“事件”。您必须将上下文(通常是一堆父元素)保留在内存中以“知道”您在树中的位置。
由于内存中没有树,因此将无法使用 XPath。您只能测试当前的“上下文”(您的手动托管堆栈)来查询您的文档。请记住,SAX 解析器只会对您的文件执行一次,因此文件中的顺序很重要。
幸运的是,还有其他方法,如VTD-XML,它是一个在内存中构建 XML 树的库,但只有结构部分,它不会从文件中提取实际内容,根据需要提取内容。它比 DOM 解析器的内存效率高得多,同时仍然允许 XPath。我个人在工作中使用这个库来解析大约 700MB 的 XPath XML 文件(是的,这很疯狂,但它可以工作,而且速度非常快。)
| 归档时间: |
|
| 查看次数: |
13612 次 |
| 最近记录: |