0

我正在尝试做一些我认为是基本任务的事情。

我追求一个简单而整洁的Java 解决方案,它可以按元素拆分 XML 内容。我不想将整个内容加载到内存中(即我想流式传输元素),我想掌握每个元素的字符串表示形式,以便将其发送到我想要的任何地方。

我使用 StAX的明显不成功的拉解析尝试:

while(xsr.hasNext()) {
    if( xsr.next() == XMLEvent.START_ELEMENT && xsr.getLocalName().equals("Order") ) {
        String element = xsr.getElementText();
        // or String element = xsr.getText();
    }
}

我也尝试过Smooks,但没有成功。特别是,此处提供的示例http://www.smooks.org/mediawiki/index.php?title=V1.4:Smooks_v1.4_User_Guide#Basic_Splitting_and_Routing并没有提供获取字符串 XML 的简洁方法元素。如果您想将 XML 元素发送到文件、数据库或 JMS 队列,这一切都很容易和顺利……但如果我想接触 String XML,那就不行了。

我非常沮丧,我开始认为编写自己的基于 SAX 的解决方案可能会更省力。谁能证明我错了?

4

1 回答 1

1

很难判断 Smooks 是否是正确的工具,因为您没有描述您要解决的更广泛的问题,例如数据片段最终需要到达的位置(它确实添加/取自 Smooks 的值)+数据流的大小。

无论如何,如果您想使用 Smooks,一个选项可能是使用 DomModelCreator [1] 捕获您感兴趣的 XML 片段,然后使用自定义“访问者”impl [2] 或 groovy scriptlet 序列化这些 DOM 片段[3]。如果这是一个巨大的 sata 流,那么您还需要动态处理这些片段(在它们被序列化之后和下一个片段之前)。这也可以在相同的自定义访问者 impl 或 groovy 脚本中完成,但这实际上取决于用户案例。在任何情况下,片段访问者都是您放置将在特定片段上执行的代码并执行“任何操作”的地方。

[1] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Mixing_DOM_and_SAX

[2] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Implementing_a_Fragment_Visitor

[3] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Scripting

于 2015-01-09T17:31:47.660 回答