2011-07-28 123 views
22

我有以下XML文本:条件包含属性在XML文本

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

我想包括checked='checked'如果cond是真实的。

我试过这个,

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

,但它不工作。

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

+0

的[?如何添加XML属性,或不取决于一个选项(可能的复制http://stackoverflow.com/questions/4777971/how-do-i-add-an-xml-attribute-or-not-depends-on-a-option) – Suma

回答

29

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> 
+0

美丽,谢谢! – aioobe

+2

也可以使用'opt.orNull'跳过转换为'xml.Text'。 – Tvaroh

+0

注意:只有选项[文本]工作,而不是选项[字符串]。 – Suma

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 

} 
8

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

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

这是斯卡拉的暗部的一个地方null行为ually得到使用。

只是为了清楚,它正是你想要的:如果condfalse,然后input没有checked属性。

+0

哇,谢谢!... – aioobe

+1

避免在属性值中使用null。它在2.8 XML库的其他部分导致了相当多的问题。 –

+0

@DavidPollak你确定吗?在检查控制台时,看起来在这种情况下根本不创建属性。 – Suma

相关问题