шаблоны: удаление элементов, у которых нет данных

Я использую функцию шаблонов Groovy xml. Ниже мой шаблон и привязки. Иногда у меня нет никакого значения для LastName. Я бы хотел, чтобы groovy не создавал элемент, если у него нет непустых данных. Может ли кто-нибудь предложить, как это сделать?

Шаблон

<PersonName nameIdentifier="Current">
     <FirstName>${FirstName}</FirstName>
     <LastName>${LastName}</LastName>
</PersonName>

Привязка

def binding1 = ['FirstName':FirstName ,'LastName':'LastName']
def binding2 = ['FirstName':FirstName ,'LastName':'']

Код

public static String createXml(String templateResourceName, def bindings)
    {
        def engine = new XmlTemplateEngine()
        def output = engine.createTemplate(getResource(templateResourceName)).make(bindings)

        return output.toString()
    }

person Aravind Yarram    schedule 15.06.2011    source источник


Ответы (1)


Я думаю, что это может сработать:

<% print LastName != null ? "<LastName>"+LastName+"</LastName>" : "" %>

Но я впервые слышу об этой функции, так что, если она появится, это будет счастливая догадка...

Редактировать: немного попробовал на веб-консоли Groovy - должно работать:

def text = '<PersonName nameIdentifier="Current">\n<FirstName>${FirstName}</FirstName>\n<% print LastName != "" ? "<LastName>"+LastName+"</LastName>\\n" : "" %></PersonName>'

person RonK    schedule 15.06.2011
comment
+1 это работает с приведенным примером (пустая строка или ноль) <% print( !LastName ? '' : "<LastName>${LastName}</LastName>" ) %> - person tim_yates; 16.06.2011
comment
Я пробовал это, но с [XmlTemplateEngine] произошла ошибка ниже java.lang.RuntimeException: Ошибка синтаксического анализа источника XML. Причина: org.xml.sax.SAXParseException: содержимое элементов должно состоять из правильно сформированных символьных данных или разметки. на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231) на groovy.util.XmlParser.parse(XmlParser.java:175) на groovy.text.XmlTemplateEngine.createTemplate(XmlTemplateEngine .java:295) ... еще 3 - person Aravind Yarram; 16.06.2011
comment
это сработало, если я использую SimpleTemplateEngine вместо XmlTemplateEngine - person Aravind Yarram; 16.06.2011