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

aio*_*obe 23 xml scala lift

我有以下XML文字:

<input type='radio'
       name={funcName}
       value='true' />
Run Code Online (Sandbox Code Playgroud)

我想包括checked='checked'if cond是否属实.

我试过这个,

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

但它不起作用.

(我真的很想避免重复整个标签.)

Kri*_*ala 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>
Run Code Online (Sandbox Code Playgroud)

  • 也可以使用`opt.orNull`来跳转到`xml.Text`. (2认同)

par*_*tic 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

}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 8

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

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

这是null实际使用的Scala的黑暗部分之一.

只是要明确,它正是你想要的:如果condfalse,那么input没有任何 checked属性.