2013-12-13 76 views
0
import groovy.xml.MarkupBuilder 

class XmlTest { 
    static void main(def args) { 
     def XmlTest s = new XmlTest() 
     s.xmlTest() 
    } 

    def xmlTest() { 
     def xml = new MarkupBuilder() 
     xml.root{ 
      response(this.xmlClosure()) 
     } 
    } 

    def xmlClosure() { 
     return {x("y")} 
    } 
} 

期望的輸出是<x>y</x> 我無法修改閉包。我需要將閉包轉換爲XML文檔而不添加任何節點。Groovy標記生成器替換根

+0

輸出我收到這是 Ÿ user1227299

+0

請添加額外的細節問題本身,而不是評論。 –

+0

我想你可以'返回新的MarkupBuilder()。x(「y」)''並跳過xmlClosure方法,但這不是你想要的,對吧?你的問題是:「我怎樣剝離-元素?」,還是我出路? – silverbeak

回答

0

這可能會有所幫助,但是如果您的元素類型不僅僅是「x」,您可能應該稍微擴展一下。通過讓構建者寫入作者,您可以以更受控制的方式控制結果。然後,使用作者,你可以使用StreamingMarkupBuilder提取你想要的元素。

這是一個非常迂迴的方式,對於非常大的XML結構,它可能不是非常有效。

我也冒昧地忽略了「響應」元素,因爲我沒有看到它有任何意義。如果您絕對需要,請隨時放回。

import groovy.xml.MarkupBuilder 
import groovy.util.XmlSlurper 
import groovy.xml.StreamingMarkupBuilder 

class XmlTest { 
    static void main(def args) { 
     def sw = new StringWriter() 
     println new XmlTest().xmlTest(sw) 
    } 

    def xmlTest(writer) { 
     def builder = new MarkupBuilder(writer)   
     builder.root(xmlClosure()) 

     def text = new XmlSlurper().parseText(writer.toString()) 

     def outputBuilder = new StreamingMarkupBuilder() 
     def result = outputBuilder.bind{ mkp.yield text.x } 
     return result 
    } 

    def xmlClosure() { 
     return {x("y")} 
    } 
} 

祝你好運。

+0

感謝它的工作。我唯一擔心的是,我們正在重新解析xml以刪除節點。閉包以mkp作爲參數。我無法將mkp指定爲xmlClosure()的參數 – user1227299