首页 > 解决方案 > 使用 groovy MarkupBuilder 在 XML 中生成 CDATA

问题描述

我希望能够使用 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> 

标签: xmlgroovymarkupbuilder

解决方案


你只需要在你的部分周围使用一些花括号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>

推荐阅读