Добавить к существующему узлу groovy.util.Node с синтаксисом groovy.xml.MarkupBuilder? - PullRequest
5 голосов
/ 10 августа 2010

Я работаю с API, который возвращает groovy.util.Node, что позволяет мне настраивать его сгенерированный XML. Мне нужно добавить дочерний элемент в узел, и мне интересно, могу ли я использовать синтаксис MarkupBuilder для изменения узла.

Например, вот что работает, но кажется клунки:

withXml { rootNode ->
    def appendedNode = new Node(rootNode, 'foo', [name:'bar'])
    def appendedNodeChild = new Node(appendedNode, 'child', [blah:'baz'])
}

Есть ли способ добавить к корневому узлу, используя синтаксис MarkupBuilder-ish? Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 сентября 2010

Вы можете использовать метод appendNode в groovy.util.Node:

withXml { rootNode ->
    rootNode.appendNode ('foo', [name: 'bar']).appendNode ('child', [blah: 'baz'])
}

Приведенный выше фрагмент кода добавит

<foo name="bar">
    <child blah="baz"/>
</foo>

к корневому узлу.

1 голос
/ 26 июля 2017

Оформить заказ groovy.util.Node * javadoc , и обнаружил два метода, которые в качестве параметра приняли 'Closure':

  • void plus(Closure c)
  • Node replaceNode(Closure c)

Итак, вы можете что-то с ними сделать. Вот пример кода build.gradle проекта весенней загрузки:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            pom.withXml {
                ((groovy.util.Node) asNode()).children().first() + {
                    setResolveStrategy(Closure.DELEGATE_FIRST)
                    parent {
                        groupId 'org.springframework.boot'
                        artifactId 'spring-boot-starter-parent'
                        version "${springBootVersion}"
                    }
                    description 'A demonstration of maven POM customization'
                }
            }
        }
    }
}
0 голосов
/ 31 августа 2010
new MarkupBuilder().root {
   foo( name:'bar' ) {
     child( blah:'blaz' )
   }
 }

не знаю, полностью ли я понимаю ваш вопрос, но я верю, что вы можете сделать что-то похожее на то, что выше

также этот пример из документации показывает, как вы можете использовать yield для добавления дополнительныхсодержание

http://groovy.codehaus.org/api/groovy/xml/MarkupBuilder.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...