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 文档。

4

1 回答 1

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")}
    }
}

祝你好运。

于 2013-12-14T17:00:17.937 回答