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

标签 java xml sax stax smooks

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

我正在寻找一个简单而整洁的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/

相关文章:

Java Sax 树(重复属性)

java - XML 解析异常 org.xml.sax.SAXParseException cvc-elt.1

java - 进行maven安装时“"[ERROR] file doesn' t存在”是什么意思?

java - 在 Liferay 中创建门户层次结构的正确方法是什么

java - 如何使用 JSESSIONID 设置特定 session ?

java - 解析 android 屏幕转储文件

java - 如何提取我的 simplejson 数组的数据?

c# - 当同一根标签为 'System.SerializableAttribute' 时,重复 "paste xml as classes"属性

xml - 十六进制 0X19 是无效字符

Java SAX 解析器 startElement 看不到标签