如何在Groovy中将XML转换为Object并插入到MongoDB集合中?

时间:2014-11-03 13:13:20

标签: java xml mongodb groovy xstream

我需要使用Groovy将大量各种XML文档提取到MongoDB中。 现在我有问题,根据一些简单的规则,没有任何通用的方法将任何XML转换为Object,至少我找不到任何。 我想做什么,采取任何随机XML,并创建包含时间戳,整数,字符串以及地图的对象,基本上它将根据XML结构进行全部分解。

例如,要在PHP中执行它,就是将其转换为JSon,从JSon转换为Object。现在我想添加一些转换器,对于XML中的某些元素,我会运行一些常规操作,例如转换时间戳,我想将某些值映射为整数,间隔等。

我查看了XStream,但它要求我为每个XML创建Object定义,否则会引发“无法解决”的异常。

有没有比手动更好的方法?在Groovy迭代到XML并不是非常快,我宁愿使用一些Java库来做它,即使它是非常动态的样式操作。

日志文件的模拟工具称为LogStash。它可以在配置中嵌入JRuby evaled代码来转换日志文件的某些字段,如时间戳,并将它们作为对象文档提取到弹性搜索中。

1 个答案:

答案 0 :(得分:1)

org.json:json将XML转换为JSON,mongo可以自己处理。当然这一切都适用于普通的java,但在groovy中更短......很多

@Grapes([@Grab('com.gmongo:gmongo:1.3'),@Grab('org.json:json:20140107')])
def json = org.json.XML.toJSONObject('''\
<?xml version="1.0"?>
<root>
        <of>
                <all>Evil</all>
        </of>
</root>''')
def db=new com.gmongo.GMongo().getDB("gmongo")
db.test.remove([:])
db.test << com.mongodb.util.JSON.parse(json.toString())
db.test.find().each{ println it}