Groovy 使用StreamingMarkupBuilder在标记内部生成CDATA
我需要以下XML结构Groovy 使用StreamingMarkupBuilder在标记内部生成CDATA,groovy,cdata,Groovy,Cdata,我需要以下XML结构 <DCS> <bytes length="29235"><![CDATA[....]]></bytes> </DCS> 并具有以下代码 DCS { bytes(length: "${docBytes.size()}",mkp.yieldUnescaped("<![CDATA[${docBytes}]]>")) } DCS{ 字节(长度:“${docBytes.size()}”,mkp.y
<DCS>
<bytes length="29235"><![CDATA[....]]></bytes>
</DCS>
并具有以下代码
DCS {
bytes(length: "${docBytes.size()}",mkp.yieldUnescaped("<![CDATA[${docBytes}]]>"))
}
DCS{
字节(长度:“${docBytes.size()}”,mkp.yieldUnescaped(“”)
}
但它会产生
<DCS>
<![CDATA[[....]]]>
<bytes length='135948'>groovy.xml.streamingmarkupsupport.StreamingMarkupWriter@32adca00</bytes>
</DCS>
groovy.xml.streamingmarkupsupport。StreamingMarkupWriter@32adca00
如何生成所需的xml结构?
提前感谢。您需要将您的
mkp.yieldUnescaped
放在一个闭包中,而不仅仅是作为bytes
标记方法的第二个参数,即:
import groovy.xml.*
byte[] docBytes = 'Tim Yates'
new StreamingMarkupBuilder().bind {
DCS {
bytes( length:docBytes.length ) {
mkp.yieldUnescaped "<![CDATA[${docBytes.toList().join(' ')}]]>"
}
}
}
导入groovy.xml*
字节[]docBytes='Tim Yates'
新建StreamingMarkupBuilder().bind{
分布式控制系统{
字节(长度:docBytes.length){
mkp.yieldUnescaped“”
}
}
}
由此产生:
<DCS><bytes length='9'><![CDATA[84 105 109 32 89 97 116 101 115]]></bytes></DCS>
你们可以在这里看到,我把每个字节编码成一个由空格分隔的字符串。如何做到这一点取决于你(我想这取决于解码字节的内容);-)