在scala中使用XML节点连接字符串
我有一个字符串列表,我需要用在scala中使用XML节点连接字符串,xml,scala,Xml,Scala,我有一个字符串列表,我需要用标记将它们连接在一起。因此,从: val list = List("line1", "line2", "line3") 我需要得到一个NodeSeq: line1<br/>line2<br/>line3 line1line2line3 列表可能只包含一个元素,在这种情况下,我应该以一个NodeSeq结束,只包含一个文本(“line1”) 是否有一个单行程序可以使用列表中的一个高阶函数来执行此操作?我试着和foldLeft一起玩,但似乎无法
标记将它们连接在一起。因此,从:
val list = List("line1", "line2", "line3")
我需要得到一个NodeSeq:
line1<br/>line2<br/>line3
line1
line2
line3
列表可能只包含一个元素,在这种情况下,我应该以一个NodeSeq结束,只包含一个文本(“line1”)
是否有一个单行程序可以使用列表中的一个高阶函数来执行此操作?我试着和foldLeft一起玩,但似乎无法让它做我想做的事
list.map(scala.xml.Text(_):scala.xml.NodeSeq).reduce(_ ++ <br /> ++ _)
不会编译。如果您不介意使用,这里有散布
:
import scalaz._
import Scalaz._
list.map(xml.Text(_): xml.Node).intersperse(<br/>): xml.NodeSeq
导入scalaz_
进口Scalaz_
list.map(xml.Text(41;):xml.Node.interspose(
):xml.NodeSeq
同意Debilski的回答。实现同样目标的另一种方法是
import scala.xml.\ucode>
XML.loadString(“+list.mkString(“
”)+”)。子级:NodeSeq
但是使用map/reduce是一种更干净的方法。这几乎会打断无效的输入,例如List(“我在问题中没有提到它,但这是未初始化的输入。您的方法有效,但是如果列表包含“asdf”之类的字符串“,它们被解析而不是显示,使Web应用程序容易受到攻击。也许我遗漏了什么,但我在“reduce”上得到一个编译错误,说在列表中找不到该方法。我需要使用reduceLeft或reduceRight,对吗?啊,这就是为什么。我在我的机器上的一个随机项目中启动了控制台,结果是2.8.1。
import scalaz._
import Scalaz._
list.map(xml.Text(_): xml.Node).intersperse(<br/>): xml.NodeSeq