【问题标题】:Generate CDATA inside of tag using StreamingMarkupBuilder使用 StreamingMarkupBuilder 在标签内生成 CDATA
【发布时间】:2012-10-17 07:16:41
【问题描述】:

我需要以下 XML 结构

<DCS>
    <bytes length="29235"><![CDATA[....]]></bytes>
</DCS>

并有以下代码

DCS {
bytes(length: "${docBytes.size()}",mkp.yieldUnescaped("<![CDATA[${docBytes}]]>"))
}

但它会生成

   <DCS>
    <![CDATA[[....]]]>
<bytes length='135948'>groovy.xml.streamingmarkupsupport.StreamingMarkupWriter@32adca00</bytes>
    </DCS>

如何生成所需的 xml 结构? 提前致谢。

【问题讨论】:

    标签: groovy cdata


    【解决方案1】:

    您需要将您的mkp.yieldUnescaped 放入一个闭包中,而不仅仅是作为bytes 标签方法的第二个参数,即:

    import groovy.xml.*
    
    byte[] docBytes = 'Tim Yates'
    
    new StreamingMarkupBuilder().bind {
      DCS {
        bytes( length:docBytes.length ) {
          mkp.yieldUnescaped "<![CDATA[${docBytes.toList().join(' ')}]]>"
        }
      }
    }
    

    生成:

    <DCS><bytes length='9'><![CDATA[84 105 109 32 89 97 116 101 115]]></bytes></DCS>
    

    您可以在这里看到,我已将每个字节编码为一个用空格分隔的字符串。你怎么做取决于你(我猜这取决于解码字节的内容);-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2015-07-02
      • 2013-01-22
      • 2011-07-20
      • 1970-01-01
      • 2011-03-09
      • 2020-06-10
      相关资源
      最近更新 更多