2010-08-10 24 views
5

我正在使用一個返回groovy.util.Node的API,允許我自定義其生成的XML。我需要將一個子元素添加到Node中,並且我想知道是否可以使用MarkupBuilder語法來修改Node。使用groovy.xml.MarkupBuilder語法附加到現有的groovy.util.Node?

例如,這裏的一些作品,但似乎klunky:

withXml { rootNode -> 
    def appendedNode = new Node(rootNode, 'foo', [name:'bar']) 
    def appendedNodeChild = new Node(appendedNode, 'child', [blah:'baz']) 
} 

有沒有辦法將追加到使用MarkupBuilder的十歲上下的語法根節點?謝謝。

回答

0
new MarkupBuilder().root { 
    foo(name:'bar') { 
    child(blah:'blaz') 
    } 
} 

不知道如果我理解你徹底的問題,但我相信你可以做這樣的事情是什麼上述

也從文檔這個例子說明了如何使用收益中額外添加內容

http://groovy.codehaus.org/api/groovy/xml/MarkupBuilder.html

+0

謝謝,但我的工作的API給了我一個節點,我沒有看到一個方法來轉換到/從MarkupBuilder的。 – 2010-08-31 16:30:45

3

您可以使用groovy.util.Node的appendNode方法:

 
withXml { rootNode -> 
    rootNode.appendNode ('foo', [name: 'bar']).appendNode ('child', [blah: 'baz']) 
} 

上面的代碼片段將添加到根節點上,添加

 
<foo name="bar"> 
    <child blah="baz"/> 
</foo> 

0

結帳groovy.util.Node的javadoc中,發現採取了兩個方法 '關閉' 作爲參數:

  • void plus(Closure c)
  • Node replaceNode(Closure c)

所以,你可以做一些與他們。 這裏是一個春天啓動項目的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' 
       } 
      } 
     } 
    } 
}