2014-11-03 69 views
0

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

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

我看着XStream,但它需要我为每个XML创建对象定义,否则会引发“无法解析”异常。

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

用于日志文件的模拟工具称为LogStash。它可以在配置中嵌入JRuby evaled代码,以便将诸如时间戳等日志文件的某些字段转换为对象文档的弹性搜索。

+0

你看过XmlSlurper? http://docs.groovy-lang.org/docs/next/html/gapi/groovy/util/XmlSlurper.html – kingdamian42 2014-11-03 15:02:50

+0

XmlSlurper不会将XML转换为可被MongoDB驱动程序接受的对象。 – Andrew 2014-11-03 16:04:51

回答

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} 
相关问题