我想使用groovy将以下DOCTYPE添加到我的html电子邮件中。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
我的groovycode就是这样开始的:
def responseDoc = job.addDocument("ECommerce_test.html"){out ->
def xmlWriter = new OutputStreamWriter(out)
MarkupBuilder html = new MarkupBuilder(xmlWriter)
我曾尝试使用MarkupBuilderHelper,但我没有使用xml声明。 这是我与MarkupBuilderHelper一起使用的代码,如果没有声明它似乎不起作用。
def helper = new groovy.xml.MarkupBuilderHelper(xml)
helper.xmlDeclaration([version:'1.0', encoding:'UTF-8', standalone:'no'])
helper.yieldUnescaped """<!DOCTYPE note SYSTEM "note.dtd">"""
/德兰
答案 0 :(得分:1)
使用StreamingMarkupBuilder这样的东西?
import groovy.xml.*
def responseDoc = job.addDocument("ECommerce_test.html"){out ->
out << new StreamingMarkupBuilder().bind {
mkp.yieldUnescaped '<?xml version="1.0", encoding="UTF-8", standalone="no"?>\n'
mkp.yieldUnescaped '<!DOCTYPE note SYSTEM "note.dtd">\n'
html {
body {
h1('WOW!')
}
}
}
}
替代方案:
import groovy.xml.*
job.addDocument("ECommerce_test.html"){out ->
new StringWriter().with { sw ->
new MarkupBuilder(sw).html {
body {
h1('WOW!')
}
}
out << '<!DOCTYPE note SYSTEM "note.dtd">\n' << sw.toString()
}
}
答案 1 :(得分:0)
它确实看起来像一个bug。 yieldUnescaped
在闭包内(在标记内)或xml声明之后起作用,但不适用于生成第一个顶级语句。