簡體   English   中英

如何在Grails中動態呈現XML?

[英]How to dynamically render XML in Grails?

我正在設置一個應用程序,該應用程序基於特定於每個呼叫實例的XML文件發起電話呼叫。 為了進行測試,我使用了Groovy MarkupBuilder和StringWriter方法將XML寫入單個文件,然后在下次啟動調用時覆蓋該文件。

但是,這將無法在生產中使用,因為我們將覆蓋當前使用的XML。 因此,我想在控制器中通過以下方式動態創建XML:

callInstance.createXml()

使用“ createXml”方法,其中包含有關如何為每個調用專門呈現XML的規則。

我發現有人詢問如何將一個對象轉換為動態創建的XML文件的實例,但這有點不同,因為我必須使用MarkupBuilder。

為了快速參考,這是我正在使用的小示例:

def f1 = new File('filename')
f1.delete()
def writer = new StringWriter()
        def xml = new MarkupBuilder(writer)
            xml.doubleQuotes = true
            xml.vxml(version:'2.1'){
                property(name:"termchar", value:"#")
                var(name:"hi", expr:"'Hello!'")
                xml.form(){
                    block(){
                        value(expr:"hi")
                        xml.goto(next:"#next") //etc, etc
                    }
                }
            }
        //break
        f1.createNewFile()
            f1 << writer.toString()

提前致謝!

您可以做的一件事(在您的控制器中)是從render方法發送回XML,如下所示:

def callxml = {
  def call = Call.get( params.id )
  render( contentType:"text/xml" ) {
    vxml( version:'2.1' ) {
      var( name:'hi', expr:call.message )
    }
  }
}

或者,您可以在Call類中添加一個方法,以便它知道如何將自身作為字符串轉換為XML:

class Call {
  String message

  String toXml() {
    def writer = new StringWriter()
    new groovy.xml.MarkupBuilder( writer ).with { xml ->
      xml.doubleQuotes = true
      vxml(version:'2.1'){
        var(name:"hi", expr:"${this.message}")
      }
    }
    writer.toString()
  }
}

然后,您應該可以調用call.toXml()

暫無
暫無

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

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