Невозможно создать xml с помощью аргументов

У меня есть метод:

def method1(elemName: String, body: Elem) = 
 <somexml>
 <{elemName}>
 body
 <!--{elemName}-->
 </somexml>

Он жалуется из-за < {elemName}> и body, где body - xml, а elemName - строка. Это строка, чтобы избежать повторения передачи 2 (открытых и закрывающих) аргументов в xml.

Почему, как я могу это исправить?

1 ответ

Вы должны создать Elem с именем elemName вручную, используя метод Elem.apply:

import xml._

val body = 
val elemName = "elemName"

val elem =
 Elem(prefix = null,
 label = elemName,
 attributes = Null,
 scope = TopScope,
 minimizeEmpty = true,
 body)
<somexml>{elem}</somexml>
// <somexml>{elem}</somexml>

С атрибутами:

val attrs =
 List("k1" -> "v1", "k2" -> "v2").reverse.
 foldLeft(Null: MetaData){ case (as, (k, v)) =>
 new UnprefixedAttribute(k, v, as)
 }

val elem =
 Elem(prefix = null,
 label = elemName,
 attributes = attrs,
 scope = TopScope,
 minimizeEmpty = true,
 body)
<somexml>{elem}</somexml>
//

С помощью xmlns:

val elem =
 Elem(prefix = null,
 label = elemName,
 attributes = Null,
 scope = NamespaceBinding(null, "http://myUrl", TopScope),
 minimizeEmpty = true,
 body)
<somexml>{elem}</somexml>
//

licensed under cc by-sa 3.0 with attribution.