如何将scala.xml.NodeSeq强制转换为元素?
我试图减少元素列表如何将scala.xml.NodeSeq强制转换为元素?,scala,Scala,我试图减少元素列表 List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b} List(1,2,3).map{n=>{n}.reduce{(a,b)=>a++b} 但是我得到了这个错误 <console>:8: error: type mismatch; found : scala.xml.NodeSeq required: scala.xml.Elem List(
List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b}
List(1,2,3).map{n=>{n}.reduce{(a,b)=>a++b}
但是我得到了这个错误
<console>:8: error: type mismatch;
found : scala.xml.NodeSeq
required: scala.xml.Elem
List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b}
:8:错误:类型不匹配;
找到:scala.xml.NodeSeq
必需:scala.xml.Elem
列表(1,2,3).map{n=>n}.reduce{(a,b)=>a++b}
如何向元素强制转换NodeSeq?在这种情况下,我不会使用
reduce
。相反,请尝试foldLeft
:
List(1, 2, 3).map{n => <a>{n}</a>}.foldLeft(NodeSeq.Empty){(a,b)=> a ++ b}
List(1,2,3).在map
上映射{n=>,reduce
和fold
,如果您是函数式编程新手,这可能会有所帮助。除了joescii的答案之外,您甚至不需要使用foldLeft
来生成节点序列。因为List
已经是一个序列,Seq[Node]
隐式转换为NodeSeq
您只需编写以下内容:
val x : NodeSeq = List(1, 2, 3).map{n => <a>{n}</a>}
除其他答案外,将NodeSeq
转换为Elem
的最简单方法是:
val elemVar = nodeSeqVal(0)
如果您确定NodeSeq中始终存在唯一的节点,那么它就可以工作,否则您将丢失其余的数据
val elemVar = nodeSeqVal(0)