在模式匹配的某些情况下,如何添加XML节点?
我希望节点test1、test2和test3仅在定义了选项时出现。 下面的代码可以工作,但是,我不喜欢test1,因为它不使用模式匹配,所以我需要调用option.get;我不喜欢test2,因为我有一个无用的行案例。我不喜欢test3,因为我有等效的.getOrElse。有没有一个很好的方法来实现这一点在模式匹配的某些情况下,如何添加XML节点?,xml,scala,Xml,Scala,我希望节点test1、test2和test3仅在定义了选项时出现。 下面的代码可以工作,但是,我不喜欢test1,因为它不使用模式匹配,所以我需要调用option.get;我不喜欢test2,因为我有一个无用的行案例。我不喜欢test3,因为我有等效的.getOrElse。有没有一个很好的方法来实现这一点 val option: Option[Int] = None val node = <test> { if (option.isDefined) <test1&
val option: Option[Int] = None
val node =
<test>
{ if (option.isDefined) <test1>{option.get}</test1> }
{ option match {
case Some(x) => <test2>{x}</test2>
case _ =>
}}
{ option.map(x => <test3>{x}</test3>).getOrElse(()) }
</test>
怎么样
val node = <test> { option.iterator.map(x => <test1>x</test1>) } </test>
如果您将该选项转换为迭代器,那么我认为您得到了本机XML处理所需的语义,也应该与toList和其他工具一起使用。您似乎只关心某些情况,而忽略了任何情况:
def f(o: Option[Int]): scala.xml.Elem =
<test>
{
o match {
case Some(x) => <test1>{x}</test1><test2>{x}</test2><test3>{x}</test3>
case None => xml.NodeSeq.Empty
}
}
</test>