Scala NodeSeq使用换行符缩小/ foldLeft

时间:2012-04-16 22:00:41

标签: scala newline reduce xmlnode

假设这很简单,但很难用新行打印出html标签的NodeSeq(所以当我在网页浏览器中查看源代码时,我可以从上到下扫描)

原样,NodeSeq打印为一条长行。

示例代码:

listOfPaths map ( jsNode(_) ) reduce (_++_)

def jsNode(path: String): NodeSeq =
  <script type="text/javascript" src={"/static/js/"+path}></script>

那么,如何在每个节点的末尾获得 \ n

由于

1 个答案:

答案 0 :(得分:4)

无论您使用什么来呈现HTML,这都是一项工作。例如,如果您使用scala.xml.PrettyPrinter,则可以执行以下操作:

val printer = new xml.PrettyPrinter(80, 2)
val paths = List("script-1.js", "script-2.js")
val header = <head>{paths map ( jsNode(_) ) reduce (_++_)}</head>

现在,当您致电printer.format(header)时,您将获得以下信息:

<head>
  <script type="text/javascript" src="/static/js/script-1.js"></script>
  <script type="text/javascript" src="/static/js/script-2.js"></script>
</head>

请注意,PrettyPrinter构造函数的第一个参数指定页面宽度,第二个参数指定缩进的空格数。

如果您只是想要快速和肮脏的东西,可以在元素之间(或之后)删除文本节点:

paths map ( jsNode(_) ) reduce (_++ Text("\n") ++ _)

但另一种解决方案几乎总是更可取。