Вы можете попробовать это:
def makeMsg(t: Option[String]) = <msg text={t orNull} />
, если значение атрибута равно null
- оно не будет добавлено к элементу.
Обновление
Еще лучше!Если вы добавите это неявное преобразование:
import xml.Text
implicit def optStrToOptText(opt: Option[String]) = opt map Text
, вы можете просто использовать t
следующим образом:
def makeMsg(t: Option[String]) = <msg text={t} />
Вот сеанс REPL:
scala> import xml.Text
import xml.Text
scala> implicit def optStrToOptText(opt: Option[String]) = opt map Text
optStrToOptText: (opt: Option[String])Option[scala.xml.Text]
scala> def makeMsg(t: Option[String]) = <msg text={t} />
makeMsg: (t: Option[String])scala.xml.Elem
scala> makeMsg(Some("hello"))
res1: scala.xml.Elem = <msg text="hello"></msg>
scala> makeMsg(None)
res2: scala.xml.Elem = <msg ></msg>
Это работает, потому что scala.xml.UnprefixedAttribute
имеет конструктор, который принимает Option[Seq[Node]]
в качестве значения.