Groovy - groovy.xml.StreamingMarkupBuilder mkp.yield和mkp.yieldUnescaped

时间:2017-03-24 20:39:54

标签: xml groovy

Groovy documentation(附加println xml)中的一个示例是:

import groovy.xml.StreamingMarkupBuilder

xml = new StreamingMarkupBuilder().bind {
    records {
        car(name: mkp.yield('3 < 5'))
        car(name: mkp.yieldUnescaped('1 < 3'))
    }
}
println xml
assert xml.toString().contains('3 &lt; 5')
assert xml.toString().contains('1 < 3')

输出:

<records>3 &lt; 5
   <car name='3 &lt; 5'/>1 < 3
   <car name='groovy.xml.streamingmarkupsupport.StreamingMarkupWriter@152aa092'/>
</records>

使用XmlUtil.serialize(xml)会在SAXParseException中生成一条消息,指出元素的内容必须包含格式正确的字符数据或标记。

我期待的更多内容

<records>
   <car name='3 &lt; 5'/>
   <car name='1 < 3'/>
</records>

这是一个错误还是示例不好?

我正在使用带有Java 8的Groovy 2.4.8。

编辑:嗯,我刚才意识到它当然不会很好,因为1 < 3的mkp.yieldUnescaped()会创建一个<保留用于标记名称。除此之外,我仍然不确定为什么mkp.yield将值放在name属性赋值右侧以外的位置。

0 个答案:

没有答案