问题描述
|
我想在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)
或任何类似的东西
谢谢!
解决方法
最简单的方法(伪代码):
用
MarkupBuilder
创建树结构
使用XML标记将其转换为字符串
解析该字符串以获取W3C DOM节点
背景:从Groovy的角度来看,W3C DOM API非常不友好,这就是为什么MarkupBuilder
使用其自己的类型的原因。
这就是Groovy支持逆运算的原因:使用ѭ5将W3C DOM节点转换为groovy.util.Node
另请参阅:使用Groovy的MarkupBuilder创建XML
,我的杆子末端可能错了,但这是您想做的吗?:
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 ) ) )