Мой код scala в настоящее время заменяет весь раздел моего xml-файла новым тегом, который я добавляю. Я хочу, чтобы он добавлял тег только один раз в качестве дочернего элемента ClientConfig, но заменял собой все теги, присутствующие в этом разделе.
val data = XML.load(file)
val p = new XMLPrettyPrinter(2)
val tryingtoAdd = addNewEntry(data,host,env)
p.write(tryingtoAdd)(System.out)
где host=bob и env=flat определены ранее, а addNewEntry определяется следующим образом
private def isCorrectLocation(parent: Elem, node: Elem, host: String): Boolean = {
parent.label == "ClientConfig" && node.label == "host"
}
def addNewEntry(elem:Elem, host: String, env: String): Elem ={
val toAdd = <host name={host} env={env} />
def addNew(current: Elem): Elem = current.copy(
child = current.child.map {
case e: Elem if isCorrectLocation(current, e, host) ⇒ toAdd
case e: Elem ⇒ addNew(e)
case other ⇒ other
}
)
addNew(elem)
}
XML, который он создает,
<ClientConfig>
<host name="bob" env="flat"/>
<host name="bob" env="flat"/>
<host name="bob" env="flat"/>
<host name="bob" env="flat"/>
</ClientConfig>
где вместо этого я хочу, чтобы он просто добавлял его как один дочерний элемент ClientConfig, например, где последние три дочерних элемента уже присутствовали в файле
<ClientConfig>
<host name="bob" env="flat"/>
<host name="george" env="flat"/>
<host name="alice" env="flat"/>
<host name="bernice" env="flat"/>
</ClientConfig>
Что я делаю? Например, у python есть простой метод вставки