2010-12-23 61 views
1

我试图按照建议的方式使用sun的Cursor-to-Event Example对Java EE 5使用StAX解析XML。您应该通过Cursor API遍历XML,并在必要时使用XMLEventAllocator分配XMLEvent如何获取XMLEventAllocator的实例?


令人遗憾的是,sun自己的例子没有编译(至少JDK 1.6没有编译,即使符合1.5代码)。该示例试图通过new实例化分配器,但JDK中的相应实现类不能从外部访问。


阅读JavaDocs并搜索网页后,我几乎没有发现任何东西。


人们可以从头实现XMLEventAllocator接口,但似乎真的错了,当有在JDK完美的实现,除了不是在StAX专家因此很难得到它的权利。

回答

2

我不会将该示例用作使用StAX的最佳做法。使用StAX,您有两种方法XMLStreamReader和XMLEventReader。两者都为您提供访问事件的API,以便对XML文档进行深度优先遍历。使用XMLStream阅读器,您可以根据事件类型从XMLStreamReader请求信息,并使用XMLEventReader为您提供表示原始事件的对象。

我推荐直接使用XMLStreamReader API。

2

除了借用Blaise建议直接使用游标API的建议,即使您确实想使用Event API,也绝对不需要定义自定义XMLEventAllocation实现。如果你想(如添加一些数据与Even对象一起传递),你可以做到这一点,但这将是一种先进的技术。

所以,如果你想使用事件API,只是问的XMLInputFactory生产XMLEventReader的,就像这样:

XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("file.xml")); 

,或者如果你有一个XMLStreamReader:

XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(streamReader); 

,这就是你需要做。

男孩,我不知道为什么教程有这个愚蠢的小代码 - 它没有任何意义。 :-)

+0

谢谢你,StaxMan。第二种方法是我在完全放弃Event API之前为了规避问题所做的。至于不可编译的例子 - 它不只是坐在那里,它甚至被广告为最好的实践,在相应的太阳教程:)难以置信 – kostja 2011-01-06 06:39:39