我正在使用返回groovy.util.Node的API,允许我自定义其生成的XML。我需要将一个子元素附加到Node中,我想知道我是否可以使用MarkupBuilder语法来修改Node。
例如,这里的东西有效,但看起来很笨拙:
withXml { rootNode ->
def appendedNode = new Node(rootNode, 'foo', [name:'bar'])
def appendedNodeChild = new Node(appendedNode, 'child', [blah:'baz'])
}
有没有办法使用MarkupBuilder-ish语法附加到rootNode?感谢。
答案 0 :(得分:3)
您可以使用groovy.util.Node的appendNode方法:
withXml { rootNode -> rootNode.appendNode ('foo', [name: 'bar']).appendNode ('child', [blah: 'baz']) }
以上代码段将添加添加
<foo name="bar"> <child blah="baz"/> </foo>
到rootNode。
答案 1 :(得分:1)
结帐groovy.util.Node的javadoc,发现了两种方法&#39;关闭&#39;作为参数:
void plus(Closure c)
Node replaceNode(Closure c)
所以,你可以用它们做点什么。 这是一个spring boot项目的build.gradle示例代码:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
pom.withXml {
((groovy.util.Node) asNode()).children().first() + {
setResolveStrategy(Closure.DELEGATE_FIRST)
parent {
groupId 'org.springframework.boot'
artifactId 'spring-boot-starter-parent'
version "${springBootVersion}"
}
description 'A demonstration of maven POM customization'
}
}
}
}
}
答案 2 :(得分:0)
new MarkupBuilder().root {
foo( name:'bar' ) {
child( blah:'blaz' )
}
}
不知道我是否完全理解你的问题,但我相信你可以做上面的事情
此文档中的此示例还显示了如何使用yield添加其他内容
http://groovy.codehaus.org/api/groovy/xml/MarkupBuilder.html