2011-07-28 15 views
22

を属性が含まれます。私はこれを試してみた条件付きで、私は文字通り、次のXMLを持つXMLリテラル

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

を、それは動作しません。

(私は本当にをいただきたいのタグ全体の繰り返しを避けるのが好き。)

+0

の可能性のある重複(http://stackoverflow.com [どのように私はオプションに応じて、XML属性を追加するか、ないのですか?]/question/4777971/how-do-i-add-an-xml-attribute-or-not-on-an-option) – Suma

答えて

29

Optionnullの不必要な使用を減少させる、動作します:

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行為スカラ座の暗い部分の1つです慣れてくる。

だけ明確にするために、それは正確に何をしたいん:condfalseであれば、その後、inputなしchecked属性を持つことになります。

+0

うわー、ありがとう!... – aioobe

+1

属性値にnullを使用しないでください。 2.8 XMLライブラリの他の部分でかなりの数の問題が発生します。 –

+0

@DavidPollak本当ですか?コンソールにチェックインすると、この場合は属性が全く作成されていないようです。 – Suma

関連する問題