Невозможно создать 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.