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 < 5')
assert xml.toString().contains('1 < 3')
输出:
<records>3 < 5
<car name='3 < 5'/>1 < 3
<car name='groovy.xml.streamingmarkupsupport.StreamingMarkupWriter@152aa092'/>
</records>
使用XmlUtil.serialize(xml)
会在SAXParseException
中生成一条消息,指出元素的内容必须包含格式正确的字符数据或标记。
我期待的更多内容
<records>
<car name='3 < 5'/>
<car name='1 < 3'/>
</records>
这是一个错误还是示例不好?
我正在使用带有Java 8的Groovy 2.4.8。
编辑:嗯,我刚才意识到它当然不会很好,因为1 < 3
的mkp.yieldUnescaped()会创建一个<
保留用于标记名称。除此之外,我仍然不确定为什么mkp.yield将值放在name
属性赋值右侧以外的位置。