![]() |
1
9
是的,只需编写一个SAX内容处理程序,当它遇到某个元素时,您可以在该元素上构建一个DOM树。我用非常大的文件完成了这项工作,而且效果非常好。 这实际上非常简单:一旦遇到所需元素的开始,就在内容处理程序中设置一个标志,然后将所有内容转发给DOM生成器。当遇到元素结尾时,将标志设置为false,并写出结果。 (对于具有相同元素名称的嵌套元素的更复杂的情况,您需要创建一个堆栈或计数器,但这仍然很容易做到。) |
![]() |
2
10
StAX 似乎是一个显而易见的解决方案:它是一个pull解析器,而不是SAX的“push”或DOM的“buffer the whole thing”方法。但不能说我用过它。一 "StAX tutorial" search 可能有用:) |
![]() |
3
5
我有很好的经验 STX ( XML流式转换 )基本上,它是一个流式的XSLT版本,非常适合以最小的内存占用来解析大量的数据。它在Java中实现了一个名为 Joost . 应该很容易找到一个STX转换,它忽略所有元素,直到元素匹配给定的xpath,复制该元素及其所有子元素(使用模板组中的标识模板),并继续忽略元素,直到下一个匹配。 更新 我拼凑了一个STX转换,做了我理解你想要的。它主要依赖于STX特有的特性,比如模板组和可配置的默认模板。
这个
以下是一个示例输入文件:
这是相应的输出文件:
不寻常的格式是由于跳过包含换行符的文本节点而导致的。
|
![]() |
4
3
既然你说的是GB,我宁愿考虑内存使用的优先顺序。SAX需要的内存大约是文档大小的2倍,而DOM需要的是 至少 5次。因此,如果XML文件是1GB大的,那么DOM将至少需要5GB的可用内存。这不再有趣了。所以SAX(或者它的任何变体,比如stax)是这里最好的选择。 如果你想要最节省内存的方法,看看 VTD-XML . 只需要 一点 内存比文件大。 |
![]() |
5
2
看看 StAX ,这可能是你需要的。有一个很好的介绍 IBM Developer Works . |
![]() |
6
2
对于这样一个大型的XML文档,具有流式体系结构(如Omnimark)的东西是理想的。 它也不一定是复杂的。像下面这样的泛标记脚本可以为您提供所需的内容:
|
![]() |
7
0
使用
|
![]() |
JobProcessTask · 如何读取此xpath表达式? 2 年前 |
![]() |
MBF · PHP导入/解析XML文件内容保存到数据库 2 年前 |
![]() |
TenkMan · SQL Server XML嵌套值查询表单990 2 年前 |
![]() |
Mohan.Murali.Peddini · XSLT模板循环记录 2 年前 |