簡體   English   中英

如何使用groovy markupbuilder創建具有特殊節點名稱的xml文檔

[英]how to create xml document with special node names with groovy markupbuilder

我正在用groovy markupbuilder構建一個螞蟻腳本。 不幸的是,markupbuilder不允許我創建名稱為“ target”的節點(targetee沒問題),因為它拋出了我

Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.util.LinkedHashMap, BuildGen$_main_closure1_closure5) values: [[name:clean], BuildGen$_main_closure1_closure5@18efaea]
Possible solutions: wait(), any(), trim(), split(), dump(), next()

因此,在我的markupbuilder中,此代碼段有效:

targete(name: 'clean') {
  delete(dir: rootProj.compilerOutput)
}

但我想通過“目標”節點實現相同的目標。

我設法通過以下方式創建了一個空的“目標”節點:

builder.invokeMethod('target', [name: 'clean'])

但是如何繼續在這個“目標”節點中放置更多節點?


工作代碼示例:

 def writer = new StringWriter()
 def builder = new groovy.xml.MarkupBuilder(writer)

 builder.project(name: projectName, basedir:'.') {

   // works with 'target2' but not with 'target'

   'target2'(name: 'build-subprojects') {
    rootProj.getAllDependentProjects().each { p->
    echo(message: "Compiling project: ${p.projectName}")
    // some real stuff
  }
}

如果我猜對了,那么您的問題是您要創建具有Groovy關鍵字名稱的節點嗎?

如果是這樣,則只需將名稱加上引號即可,如下所示:

def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder( writer )

builder.project {
  'for'(name: 'clean') {
    delete(dir: '.')
  }
}

println writer

該代碼段將打印出來:

<project>
  <for name='clean'>
    <delete dir='.' />
  </for>
</project>

對我來說,這有效:

def projects = [ 'pro_one', 'pro_two' ]
def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)

builder.project( name: 'test', basedir:'.' ) {
  'target'( name: 'build-subprojects' ) {
    projects.each { p ->
      echo( message: "Compiling project: ${p}" )
    }
  }
}

println writer.toString()

在調用此代碼之前,是否已將target設置為代碼中的任何內容?

您可以嘗試:

  builder.target( name: 'build-subprojects' ) {

那可能更好?

我已經嘗試過Groovy 1.7.5和1.8 beta 2,但無法使其失敗:-/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM