如何在groovy中构建w3c文档?

时间:2011-05-26 13:53:04

标签: groovy w3c

我想在groovy中构建一个w3c xml节点:

def CAR_RECORDS = '''<records>
             <car name='HSV Maloo' make='Holden' year='2006'/>
             <car name='P50' make='Peel' year='1962'/>
             <car name='Royale' make='Bugatti' year='1931'/>
           </records>
         '''

        def carRecords = new XmlParser().parseText(CAR_RECORDS)

但我使用MarkupBuilder的所有内容都是groovy.util.Node(carRecords是一个groovy.util.Node)。 是否有一种优雅的方式(不需要标准的java xml编码)来做到这一点?

我正在寻找的东西是这样的:

def carRecords = new W3CXmlParser().parseText(CAR_RECORDS)

或任何类似的......

谢谢!

2 个答案:

答案 0 :(得分:2)

最简单的方法(伪代码):

  • 使用MarkupBuilder
  • 创建树状结构
  • 将其转换为带有XML标记的字符串
  • 解析String以获取W3C DOM节点

背景:从Groovy的角度来看,W3C DOM API非常不友好,这就是为什么MarkupBuilder使用自己的类型。

这就是Groovy支持逆操作的原因:使用groovy.util.Node将W3C DOM节点转换为DomToGroovy

另请参阅:Creating XML using Groovy's MarkupBuilder

答案 1 :(得分:1)

我可能有错误的结局,但这是你想要做的吗?:

import org.xml.sax.InputSource
import org.w3c.dom.Node
import javax.xml.parsers.DocumentBuilderFactory

def CAR_RECORDS = '''<records>
  <car name='HSV Maloo' make='Holden' year='2006'/>
  <car name='P50' make='Peel' year='1962'/>
  <car name='Royale' make='Bugatti' year='1931'/>
</records>'''

Node carRecords = DocumentBuilderFactory.newInstance()
                                        .newDocumentBuilder()
                                        .parse( new InputSource( new StringReader( CAR_RECORDS ) ) )