[英]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.