2012-06-25 13 views
6

Supongamos que tengo un documento XML almacenado como un anti-XML Elem:elemento Anexar como hijo del elemento anti-XML

val root : Elem = 
    <foo attr="val"> 
     <bar/> 
    </foo> 

. Quiero añadir <baz>blahblahblah</baz> al elemento raíz como un niño, dando

val modified_root : Elem = 
    <foo attr="val"> 
     <bar/> 
     <baz>blahblahblah</baz> 
    </foo> 

En comparación, en Python que se acaba de root.append(foo).

Sé que puedo añadir (como un hermano) a un Group[Node] usando :+, pero eso no es lo que quiero:

<foo attr="val"> 
    <bar/> 
</foo> 
<baz>blahblahblah</baz> 

¿Cómo lo añaden como el último hijo de <foo>? En cuanto a the documentation no veo ninguna manera obvia.


similares a Scala XML Building: Adding children to existing Nodes, excepto que esta pregunta es para Anti-XML en lugar de scala.xml.

Respuesta

9

Elem es una case class, para que pueda utilizar copy:

import com.codecommit.antixml._ 

val root: Elem = <foo attr="val"><bar/></foo>.convert 
val child: Elem = <baz>blahblahblah</baz>.convert 

val modified: Elem = root.copy(children = root.children :+ child) 

El método es copyautomatically generated for case classes, y se necesita argumentos con nombre que le permiten cambiar los campos individuales de la instancia original.

3

Aunque todavía no es relevante, pero hay un método addChild/ren en Elem en master en el repositorio Anti-XML. Actualmente su implementación contiene un error, pero hay una solicitud de extracción pendiente para solucionarlo. Por lo tanto, probablemente debería usarlo en versiones futuras.

(Hubiera hecho este comentario, pero todavía no estoy autorizado a hacerlo)

Cuestiones relacionadas