繁体   English   中英

使用Castor和Grails解组XML

[英]XML unmarshalling with Castor and Grails

我有一个grails项目,其中包含一些域对象。 我在此代码中使用一个Java项目,该项目可以为我解析文档。 调用该Java项目的控制器正在使用JAXB从Java项目返回的对象生成XML。 我想使用此XML文档(在使用JAXB进行一些文本解析之后生成),以在grails项目中填充Domain类。 它如何工作? 我可以使用Castor之类的东西,并使用groovy类的名称创建映射吗? 我的想法是我想在数据库中生成新条目,并根据从他们上传的文档中解析出的任何文本将其保存给用户。

无论如何这怎么在grails中起作用? 我可以从另一个对象的控制器创建一个新的Domain对象吗?

 Project p = new Project(); 

然后做一个p.save()

这里下载Castor Core和Castor XML jar并将它们放在lib目录中(使用Grails的依赖管理可能是一种更好的方法来管理这种依赖,但这是一种快速而肮脏的方法)。

使用Castor内省模式 ,如果您的XML与您的域很好地匹配,则无需担心创建映射文件。 这是一个例子:

grails-app / domain / MyDomain.groovy

class MyDomain {
    String foo
    String bar
}

grails-app / controllers / MyController.groovy

import org.exolab.castor.xml.Unmarshaller
import java.io.ByteArrayInputStream

class MyController {

    def myAction = {
        def xml = '''
<myDomain>
  <foo>My Foo String</foo>
  <bar>My Bar String</bar>
</myDomain>
'''
        def reader = new ByteArrayInputStream(xml.bytes).newReader()
        def domain = (MyDomain)Unmarshaller.unmarshal(MyDomain.class, reader)
        domain.save()

        def count = MyDomain.countByFoo('My Foo String')

        render "Found $count results"
    }
}

导航到localhost:8080/appname/my/myAction ,它应显示“找到N个结果”,N> 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM