有条件地包含XML文字中的属性

时间:2011-07-28 09:35:34

标签: xml scala lift

我有以下XML文字:

<input type='radio'
       name={funcName}
       value='true' />

如果checked='checked'为真,我想加cond

我试过了,

<input type='radio'
       name={funcName}
       value='true'
       { if (cond) "checked='checked'" else "" } />

但它不起作用。

(我真的喜欢避免重复整个标记。)

3 个答案:

答案 0 :(得分:30)

Option也有效,可减少null的不必要使用:

scala> val checked:Option[xml.Text] = None
checked: Option[scala.xml.Text] = None

scala> val xml = <input checked={checked} />
xml: scala.xml.Elem = <input ></input>

答案 1 :(得分:8)

如果只想在选中时添加属性,可以在使用Scala XML API后添加它:

import scala.xml._

val snippet = {

  val x = <input type='radio'
                 name={funcName}
                 value='true' />

  if( cond ) {
    x % new UnprefixedAttribute("checked","checked",Null)
  } else x

}

答案 2 :(得分:8)

信不信由你,你可以这样做:

<input type='radio'
       name={funcName}
       value='true'
       checked={ if (cond) "checked" else null } />

这是Scala的一个黑暗部分,null实际上被使用了。

只是要说清楚,它完全符合您的要求:如果condfalse,那么input将具有 checked属性