我想编写一个通用的xml解析器,它可以展平任何xml文件。 e.g。
如果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。 这个问题有一个通用的解决方案吗?
答案 0 :(得分:0)
使用SAX解析器,并保留一堆打开的元素。看到元素打开后,将它们添加到堆栈中。在文本节点上,打印堆栈,在关闭元素上,将它们从堆栈中弹出。应该是直截了当的。
答案 1 :(得分:0)
你似乎想要的“扁平化”更多的是“爆炸”。您的输入是树,您希望将其分解为一组记录,并重复所有冗余数据。这不是XSLT的工作。从概念上讲,您必须对数据进行多次传递。首先,您必须识别所有级别的所有叶节点集合;然后,您必须遍历所有可能的叶节点组合,为每个组合输出一组完整的数据。如果您的输入为~1GB,请准备好输出太字节。
看起来你有两个选择:
无论哪种方式,我都不确定你所描述的实际上是你想要的。对于任何大型,多级别的叶节点集合,组合的数量很容易变得天文数字。