有谁能告诉我如何写" xml"标记到输出?正如所料,loadString()方法在加载时摆脱它。
object SitemapController extends Controller {
def validDeals = Action { implicit request =>
val xmlStr = "<?xml version="1.0" encoding="UTF-8"?><msg>There's no xml tag</msg>"
Ok( scala.xml.XML.loadString(xmlStr) )
}
}
我从控制器得到的只是
<msg>There's no xml tag</msg>
答案 0 :(得分:3)
OK
是Status
,它使用Writable
类型类将内容编码为字节(see Status.apply
)。查看源here,xml节点的Writable
只调用toString
。基本上,您只需获取根节点的字符串表示形式,而不是具有xml声明的文档。
要获得decl,您需要使用XML.write()
和java.io.Writer
以及其他参数调用xmlDecl = true
。 (我能够为DocType提供null
,而不是发明一个。
你可以写一个StringWriter然后发送它,但我认为最有效的方法(特别是如果你的文档很大)将为Writable
创建一个隐式xml.Node
来覆盖内置之一。
答案 1 :(得分:0)
Play处理XML非常愚蠢。 M.B。没有多少用过它? 无论如何,这里是可写的,形成适当的xml文档,也修剪空格。 只需将其导入控制器即可。
object Implicits {
implicit def writeableOf_Node(implicit codec: Codec): Writeable[NodeSeq] = {
Logger.debug(s"Codec: $codec")
Writeable{ xml => {
val stringWriter = new StringWriter(1024)
val node = scala.xml.Utility.trim(xml(0))
scala.xml.XML.write(stringWriter, node, codec.charset, xmlDecl = true, null)
val out = codec.encode(stringWriter.toString)
stringWriter.close()
out
}}
}
}