/ / Nie można utworzyć xml za pomocą argumentów - xml, scala

Nie można utworzyć pliku XML za pomocą argumentów - xml, scala

Mam metodę:

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

Narzeka z powodu <{elemName}> i body, gdzie body to xml, a elemName to ciąg znaków. Czy jest to ciąg znaków, aby uniknąć powtórzenia przekazywania 2 (otwartych i zamykających) argumentów w xml.

Dlaczego, jak mogę to naprawić?

Odpowiedzi:

3 dla odpowiedzi № 1

Musisz stworzyć Elem z imieniem elemName ręcznie za pomocą metody Elem.apply:

import xml._

val body = <body />
val elemName = "elemName"

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

Z atrybutami:

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>
// <someXml><elemName k1="v1" k2="v2"><body/></elemName></someXml>

Z xmlns:

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