gpt4 book ai didi

java - 使用 Smooks 或其他工具按元素拆分 XML 文件

转载 作者:行者123 更新时间:2023-12-01 12:03:30 27 4
gpt4 key购买 nike

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

我正在寻找一个简单而整洁的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没有提供一种获取元素的 String XML 的简洁方法。如果您想将 XML 元素发送到文件、数据库或 JMS 队列,那么这一切都是简单而顺利的……但如果我想接触 String XML,则不然。

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

最佳答案

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

无论如何,如果您想使用 Smooks,一种选择可能是使用 DomModelCreator [1] 捕获您感兴趣的 XML 片段,然后使用自定义的“Visitor”impl [2] 序列化这些 DOM 片段,或者一个很棒的 scriptlet [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

关于java - 使用 Smooks 或其他工具按元素拆分 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com