我希望setEscapeAttributes( Boolean )
方法可以打开和关闭转义的特殊字符,也就是说,当我将构建器内容转换为字符串时,特殊字符将会有所不同,具体取决于我们提供给该方法的值。但是,似乎我的期望不对或方法不正常。以下是一个示例代码段:
foo.groovy
import groovy.xml.*
def writer = new StringWriter()
def builder = new MarkupBuilder( writer )
println builder.isEscapeAttributes()
builder.setEscapeAttributes( false )
println builder.isEscapeAttributes()
builder.html {
h2 "hello<br>world"
}
println writer.toString()
如果您运行groovy foo.groovy
,则输出结果为:
true
false
<html>
<h2>hello<br>world</h2>
</html>
我期望h2
行
<h2>hello<br>world</h2>
那么,发生了什么?我正在使用groovy 2.1.8,这是撰写本文时的最新版本。
答案 0 :(得分:6)
使用setEscapeAttributes
会阻止它转义attributes
,所以:
println new StringWriter().with { writer ->
new MarkupBuilder( writer ).with {
// Tell the builder to not escape ATTRIBUTES
escapeAttributes = false
html {
h2( tim:'woo>yay' )
}
writer.toString()
}
}
将打印:
<html>
<h2 tim='woo>yay' />
</html>
相反,如果你注释掉上面的escapeAttributes
行:
<html>
<h2 tim='woo>yay' />
</html>
如果您想避免转义内容,则需要使用mkp.yieldUnescaped
,如下所示:
println new StringWriter().with { writer ->
new MarkupBuilder( writer ).with {
html {
h2 {
mkp.yieldUnescaped 'hello<br>world'
}
}
writer.toString()
}
}
将打印:
<html>
<h2>hello<br>world</h2>
</html>
虽然应该小心,因为这显然是无效的xml(因为“未关闭”)