如何根据选项添加XML属性?

前端之家收集整理的这篇文章主要介绍了如何根据选项添加XML属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经编写了一个makeMsg函数,但是我不喜欢它 – 它似乎根本就不是基于Option.isDefined来区分 Scala-ish.你能做得更好吗
scala> def makeMsg(t: Option[String]) = 
     | if (t.isDefined) <msg text={t.get} /> else <msg />
makeMsg: (t: Option[String])scala.xml.Elem

scala> makeMsg(Some("hello"))
res0: scala.xml.Elem = <msg text="hello"></msg>

scala> makeMsg(None)
res1: scala.xml.Elem = <msg></msg>
你可以试试这个:
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]]作为值的构造函数.

猜你在找的XML相关文章