Je comprends comment créer du XML dans Groovy en utilisant MarkupBuilder. Comment ajouter/insérer des éléments dans un objet MarkupBuilder après la création initiale? Par exemple, commencer par:Ajouter/insérer des éléments dans l'objet Groovy MarkupBuilder après la création initiale
def builder = new MarkupBuilder(writer)
def items = builder.items{
item(name: "book")
}
qui produirait:
<items>
<item name="book/>
</items>
Je suis en train de créer un message XML de base extensible, en utilisant une classe de base pour envelopper le constructeur et l'héritage d'ajouter des balises spécifiques. S'appuyant sur l'exemple ci-dessus, voici ma classe de base:
Class ItemBuilder{
def name;
def builder = new MarkupBuilder(writer)
public Object getXML(){
def items = builder.items{
item(name: this.name)
}
return items;
}
}
Voici un exemple constructeur de message étendu:
Class SubItemBuilder extends ItemBuilder{
def type;
public Object getXML(){
def items = super.getXML();
//do something here to add a subitem child tag....
return items;
}
}
Si je travaillais avec JSON en JavaScript, je ferais quelque chose comme:
items.item.subitem = "foo"
Je veux finalement SubItemBuilder.getXML générer:
<items>
<item name="book>
<subitem type="paperback"/>
</item>
</items>
Existe-t-il un moyen facile d'y parvenir? Il semble qu'une option consiste à sous-classer MarkupBuilder et à ajouter des méthodes publiques pour insérer des nœuds enfants. Y a-t-il une meilleure approche pour atteindre le résultat que je recherche?
Je réalise que cette réponse est assez ancienne mais cela aurait été utile si vous aviez fourni l'extrait de code qui a résolu votre problème. La page que vous avez liée est assez longue et contient un _lot_ de code. +1 pour votre Q et -1 pour cet A. – nickdos
@nickdos J'ai ajouté un extrait de code – elevine