使用 groovy MarkupBuilder 在 XML 中生成 CDATA

Generate CDATA in XML using groovy MarkupBuilder

我希望能够使用 Groovy 在我的 XML 中生成 CDATA 部分。我已经使用 MarkupBuilder 的 mkp 来做到这一点,但它不起作用。我循环浏览产品,然后生成以下片段作为 XML 的一部分。我得到的是以下内容:它在产品代码旁边打印未转义的文本,而不是在描述中打印,后者留空。

  <product>
     <name>banana</name>
     <code>10002</code><name>ICON_1</name><!CDATA[This product is on 
                                                     sale]]]>
     <description/>
   </product>   

这是用于生成数据的部分。

 product{
    name (product.name)
    code (product.code)
    description mkp.yieldUnescaped("<!CDATA[${product.description}]]>")
}

这是我要打印的内容:

<product>
   <name>banana</name>
   <code>10002</code>
   <description><![CDATA[This product is on sale]]></description>
</product> 

您只需要在 CDATA 部分周围使用一些大括号来提示构建器将其放置在何处:

def out = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(out)

xml.product {
    name ('banana') 
    code ('10002')
    description { mkp.yieldUnescaped("<![CDATA[Example of text in a CDATA block]]>") }
}

System.out.println out.toString()

这会产生:

<product>
  <name>banana</name>
  <code>10002</code>
  <description><![CDATA[Example of text in a CDATA block]]></description>
</product>