2011-07-28 36 views
22

Tôi đã XML sau đây theo nghĩa đen:có điều kiện bao gồm thuộc tính trong XML đen

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

tôi muốn bao gồm checked='checked' nếu cond là đúng.

Tôi đã cố gắng này,

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

nhưng nó không hoạt động.

(tôi muốn thực sự muốn tránh lặp lại toàn bộ thẻ.)

+0

có thể trùng lặp của [? Làm thế nào để thêm một thuộc tính XML, hoặc không, tùy thuộc vào một lựa chọn] (http://stackoverflow.com/question/4777971/how-do-i-add-an-xml-thuộc tính-hoặc-không-tùy-on-an-tùy chọn) – Suma

Trả lời

29

Option cũng làm việc, làm giảm sử dụng không cần thiết của 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

Đẹp, cảm ơn! – aioobe

+2

Bạn cũng có thể sử dụng 'opt.orNull' để bỏ qua chuyển đổi thành' xml.Text'. – Tvaroh

+0

Lưu ý: chỉ Tùy chọn [Văn bản] hoạt động, không phải Tùy chọn [Chuỗi]. – Suma

8

Nếu bạn muốn thêm thuộc tính chỉ khi kiểm tra, bạn có thể thêm nó sau khi sử dụng 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

tin hay không, bạn có thể làm điều đó như thế này:

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

Đây là một trong những phần tối của Scala nơi null hành ual được sử dụng.

Chỉ cần để làm cho rõ ràng, nó thực hiện chính xác những gì bạn muốn: nếu condfalse, sau đó input sẽ có khôngchecked thuộc tính.

+0

wow, cảm ơn! ... – aioobe

+1

Tránh sử dụng null trong các giá trị thuộc tính. Nó gây ra một số vấn đề công bằng trong các phần khác của 2.8 thư viện XML. –

+0

@DavidPollak Bạn có chắc chắn không? Khi kiểm tra trong giao diện điều khiển, có vẻ như thuộc tính không được tạo ở tất cả trong trường hợp này. – Suma

Các vấn đề liên quan