【发布时间】:2012-05-23 08:43:57
【问题描述】:
我想编写一个通用的 xml 解析器,它可以展平任何 xml 文件。例如
如果 xml 具有如下结构:
<A a="a1">
<B> b </B>
<C>
<D> d1 </D>
<D> d2 </D>
</C>
<C>
<D> d3 </D>
</C>
<E> e1 </E>
</A>
我应该得到如下输出:
a1 b d1 e1
a1 b d2 e1
a1 b d3 e1
我希望解析器是通用的,这样它就可以在不知道标签的情况下应用于任何 xml。我听说过 XSLT。但我不确定我们是否可以编写一个没有 xml 标签知识的通用 XSL。 XML 文件的大小约为 1Gb。 这个问题有通用解决方案吗?
【问题讨论】:
-
xslt 要求在执行转换之前将整个文档加载到内存中。那是一个很大的内存占用。你研究过 SAX 吗?
-
是的,我知道 ABT SAX 解析器。但是我被困在没有任何 xml 标签的任何先前信息,甚至是根标签的情况下,无法展平嵌套的 xml。
-
@ColinD 通常 Xslt 处理器支持流式传输,因此您不必将整个文档加载到内存中。见What is the Most Efficient Java-Based XSLT Processor。
-
@user1397016 使用 Xslt 并不需要了解实际标签,而是需要了解结构 - 只需使用 Location Paths,您就可以实现很多目标。
-
@Filburt 流式传输 xslt 是 xsl 规范 (2.0+) 的下一个版本正在考虑的功能。我想大多数现在做流媒体的处理器,只在特定情况下做,所以我不确定它是否可以依赖。
标签: java xml xslt xml-parsing