1

我正在尝试StAX使用 sun 的用于 Java EE 5 的Cursor-to-Event Example来遵循推荐的解析 XML 的方法。您应该通过 Cursor API 遍历 XML 并在必要时XMLEvent使用 an分配一个。XMLEventAllocator


尴尬的是,sun 自己的示例无法编译(至少在 JDK 1.6 中没有,即使在 1.5 代码兼容的情况下也是如此)。该示例尝试通过 实例化分配器new,但 JDK 中的相应实现类无法从外部访问。


在阅读了 JavaDocs 并在网上搜索后,我几乎一无所获。


XMLEventAllocator可以从头开始实现接口,但似乎真的错了,当 JDK 中有完美的实现时,除了不是专家之外StAX,很难做到正确。

4

2 回答 2

2

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

我建议直接使用 XMLStreamReader API。

于 2010-12-23T17:50:07.970 回答
2

除了支持 Blaise 直接使用 cursor API 的建议之外,即使您确实想使用 Event API,也绝对不需要定义自定义XMLEventAllocation实现。如果你愿意,你可以这样做(比如添加一些数据与偶数对象一起传递),但这将是一种高级技术。

所以如果你想使用 Event API,只要让 XMLInputFactory 产生 XMLEventReader,就像这样:

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

或者如果你有一个 XMLStreamReader:

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

这就是你需要做的。

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

于 2011-01-06T00:28:31.313 回答