Null检查scala XML属性

时间:2016-04-15 13:12:26

标签: scala

如何避免进入具有None类型的xml节点的属性:

我尝试了以下代码,但它不起作用:

li:first-child {
    border-right: solid 0.188em #da291c;
    padding: 0 2em 0 0;
}

li:first-child + li {
    padding: 0 0 0 2em;
}

li:first-child + li + li {
    padding: 0 2em 0 0;
    border-right: solid 0.188em #da291c;
    margin-left: 21%;
}

li:first-child + li + li + li {
    padding: 0 0 0 2em;
}      

预期输出为:

scala> val checked:Option[String] = None
checked: Option[String] = None

scala> val xml = <input checked={checked} />
<console>:11: error: overloaded method constructor UnprefixedAttribute with alternatives:
(key: String,value: Option[Seq[scala.xml.Node]],next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and>
(key: String,value: String,next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and>
(key: String,value: Seq[scala.xml.Node],next1: scala.xml.MetaData)scala.xml.UnprefixedAttribute
cannot be applied to (String, Option[String], scala.xml.MetaData)
   val xml = <input checked={checked} />

如果选中的类型是xml.Text,那么它的工作原理。所以我基本上想要有条件地插入属性,如果值是Some(type)然后包含属性,如果它的None然后忽略,那么除了Xml.Text之外的属性类型怎么可能?

2 个答案:

答案 0 :(得分:1)

Option[String]的{​​{1}}类型不正确,您应该使用Option[scala.xml.Text]。例如,如果您有Option[String],则可以map

val xml = <input checked={checked.map(scala.xml.Text.apply)}/>

或者您可以使用

val xml = <input checked={checked.orNull}/>

但我觉得与null合作有点难看。

答案 1 :(得分:0)

<input checked = {checked.getOrElse(null)} />

>> xml: scala.xml.Elem = <input/>

将属性设置为null与没有属性相同。